苹果
2016-01-08 18:53
288 查看
描述
ctest有n个苹果,要将它放入容量为v的背包。给出第i个苹果的大小和价钱,求出能放入背包的苹果的总价钱最大值。
输入有多组测试数据,每组测试数据第一行为2个正整数,分别代表苹果的个数n和背包的容量v,n、v同时为0时结束测试,此时不输出。接下来的n行,每行2个正整数,用空格隔开,分别代表苹果的大小c和价钱w。所有输入数字的范围大于等于0,小于等于1000。
输出对每组测试数据输出一个整数,代表能放入背包的苹果的总价值。
样例输入
样例输出
来源动态规划经典问题
ctest有n个苹果,要将它放入容量为v的背包。给出第i个苹果的大小和价钱,求出能放入背包的苹果的总价钱最大值。
输入有多组测试数据,每组测试数据第一行为2个正整数,分别代表苹果的个数n和背包的容量v,n、v同时为0时结束测试,此时不输出。接下来的n行,每行2个正整数,用空格隔开,分别代表苹果的大小c和价钱w。所有输入数字的范围大于等于0,小于等于1000。
输出对每组测试数据输出一个整数,代表能放入背包的苹果的总价值。
样例输入
3 3 1 1 2 1 3 1 0 0
样例输出
2
来源动态规划经典问题
#include<stdio.h> #include<cstring> using namespace std; int main() { int v,n,i,j,dp[1020],c[1020],w[1020]; while(scanf("%d %d",&n,&v)!=EOF) { if(n==0&&v==0) break; for(i=0;i<n;i++) scanf("%d %d",&c[i],&w[i]); memset(dp,0,sizeof(dp)); for(i=0;i<n;i++) {for(j=v;j>=c[i];j--) { if(dp[j]<dp[j-c[i]]+w[i]) dp[j]=dp[j-c[i]]+w[i]; } } printf("%d\n",dp[v]); } }
相关文章推荐
- Java读写文件的编码问题
- C++:友元2(时间之差)
- Struts2拦截器
- BZOJ 2661: [BeiJing wc2012]连连看( 费用流 )
- 物理机上搭建2012R2储存池
- Android 性能优化对象池技术 <5>
- 浅谈HTTP中Get与Post的区别
- Java对excel文件的处理
- 修改html页面文字选中样式
- AngularJS 学习笔记 (三)
- 常用镜像地址
- FMX下Edit只能输入数字
- C++ 类头文件的编译错误
- Android NDK开发(一)入门篇
- Ubuntu14.04安装配置Hadoop2.6.0(完全分布式)与 wordcount实例运行
- C 删除一个数组中重复的元素
- SMS短信PDU编码
- GP中外部表数据装载
- C++:友元1(两点之间的距离)
- HDU 3265 Posters