hdu 5410 CRB and His Birthday 01背包和完全背包
2015-08-20 21:34
477 查看
#include<stdio.h> #include<string.h> #include<vector> #include<queue> #include<algorithm> using namespace std; int main() { int _,i,j,m,n,k,a[1024],b[1024],w[1024],dp[2048]; scanf("%d\n",&_); while(_--) { scanf("%d%d",&m,&n); for(i=0;i<n;i++) scanf("%d%d%d",&w[i],&a[i],&b[i]); memset(dp,0,sizeof(dp)); for(i=0;i<n;i++) { for(j=m;j>=w[i];j--) dp[j]=max(dp[j],dp[j-w[i]]+a[i]+b[i]); for(j=w[i];j<=m;j++) dp[j]=max(dp[j],dp[j-w[i]]+a[i]); } printf("%d\n",dp[m]); } return 0; }
第一次全部当成01背包做无限超时。
#include<stdio.h> #include<string.h> #include<vector> #include<queue> #include<algorithm> using namespace std; int main() { int _,i,j,m,n,k,a[1024],b[1024],w[1024],dp[2048]; scanf("%d\n",&_); while(_--) { scanf("%d%d",&m,&n); for(i=0;i<n;i++) scanf("%d%d%d",&w[i],&a[i],&b[i]); memset(dp,0,sizeof(dp)); for(i=0;i<n;i++) { k=m/w[i]; while(k!=0) { for(j=m;j>k*w[i];j--) dp[j]=max(dp[j],dp[j-k*w[i]]+k*a[i]+b[i]); k--; } } printf("%d\n",dp[m]); } return 0; }
相关文章推荐
- 在eclipse和netbeans下如何向main函数传参
- HackerRank and MiniMax
- break与return跳转的区别
- linux 命令 - 帮助命令 help info
- 大龄屌丝自学笔记--Java零基础到菜鸟--006
- D2
- 【LeetCode】202. Happy Number
- 类型转换
- Android--Activity的启动模式
- 动态规划——最大子序列、最长递增子序列、最长公共子串、最长公共子序列、字符串最小编辑距离日记整理
- 常见排序总结
- day2:实例变量可见度、方法、setter、getter
- Qt creator 常用的快捷健
- [翻译] EAIntroView
- 先验分布与后验分布
- 个人--规划--钱的划分
- UI17_网络请求之AFN,收藏删除等文件,检查网络类型(2g,WiFi,3g)
- 七夕之Linq
- struts2知识总结
- Linq(一)