HDU 1171 (01背包问题)
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1171
分析:
例如数据
3
10 2
20 1
30 1
获得这样一个降序的数组:30 20 10 10 (两个10是因为10值物品有两个)
总物品价值的一半为背包容量,然后从价值大的物品开始选,当当前背包中物品价值加上将要放的物品的价值大于背包容量的时候,将要放入背包的物品不放入
注意点
1.n为负数的时候停止循环,而不是n==-1
2.背包容量为有小数的数时,取ceil上极限
3.数组排序降序,升序的话不好处理数据
特殊数据
3
10 2
20 1
21 1
答案:31 30
代码如下:
#include<bits/stdc++.h> using namespace std; int main() { int n; while(scanf("%d",&n)!=EOF&&n>=0) { if(n<0) break; int x,y; int q[100005],len=0; double sum=0.0,temp=0.0; for(int i=0;i<n;i++) { scanf("%d %d",&x,&y); sum=sum+(double)x*y; while(y--) { q[len++]=x; } } temp=ceil(sum*1.0/2.0); sort(q,q+len); double a=0.0,b=0.0; for(int i=len-1;i>=0;i--) { if(a+q[i]>temp) continue; a=a+q[i]; } b=sum-a; if(b>a) { int t=a; a=b; b=t; } printf("%.0lf %.0lf\n",a,b); } }
自己还是太菜。。。写了两小时。。。。。。。。
心之所向,素履以往
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南