【Luogu P1048 Luogu P1016】采药/疯狂的采药
来源:互联网 发布:戴予桐 直播软件 编辑:程序博客网 时间:2024/05/22 03:35
采药/疯狂的采药
两道模板题,分别是0-1背包和完全背包。
0-1背包
二维:dp[i][j]=max(dp[i-1][j-time[i]]+v[i],dp[i-1][j]);
由于i的状态由i-1的状态转移而来,那么可以省去物品的维度。
但是重量/容积维度的循环j必须倒序进行,否则可能使物品被重复选。
大家可以自己思考一下为什么。
一维:dp[j]=max(dp[j-time[i]]+v[i],dp[j]);
#include<iostream>#include<cstdio>using namespace std;int dp[1001][1001],t,m,time[1001],v[1001];int main(){ cin>>t>>m; for (int i=1;i<=m;i++) cin>>time[i]>>v[i]; for (int i=1;i<=t;i++) dp[0][i]=0; for (int i=1;i<=m;i++) for (int j=t;j>=0;j--) if (j>=time[i]) dp[i][j]=max(dp[i-1][j-time[i]]+v[i],dp[i-1][j]); else dp[i][j]=dp[i-1][j]; cout<<dp[m][t]; return 0;}
二维0-1背包做法程序参考
#include<iostream>#include<cstdio>using namespace std;int dp[1001],t,m,time[1001],v[1001],max1;int main(){ cin>>t>>m; for (int i=1;i<=m;i++) cin>>time[i]>>v[i]; for (int i=1;i<=m;i++) for (int j=t;j>=time[i];j--) dp[j]=max(dp[j-time[i]]+v[i],dp[j]); cout<<dp[t]; return 0;}
一维0-1背包做法程序参考
完全背包
在0-1背包中的重量/容积维度倒序循环是为了防止物品被重复选。那么其实直接将其改成顺序循环即可。
当然也可以加多一重循环,枚举物品选用的个数,但是这个做法会TLE。
#include<iostream>#include<cstdio>using namespace std;int dp[100001],t,m,time[100001],v[10001];int main(){ cin>>t>>m; for (int i=1;i<=m;i++) cin>>time[i]>>v[i]; for (int i=1;i<=t;i++) dp[i]=0; for (int i=1;i<=m;i++) for (int j=time[i];j<=t;j++) dp[j]=max(dp[j-time[i]]+v[i],dp[j]); cout<<dp[t]; return 0;}
完全背包程序参考
阅读全文
1 0
- 【Luogu P1048 Luogu P1016】采药/疯狂的采药
- Luogu P1616 疯狂的采药+完全背包
- P1048 采药
- P1048 采药
- P1048 采药
- 洛谷P1048采药题解
- 洛谷 P1048 采药
- 洛谷 P1048 采药
- 洛谷 P1048 采药
- P1616 疯狂的采药
- P1616 疯狂的采药
- P1616 疯狂的采药
- 疯狂的采药
- 疯狂的采药
- 疯狂的采药
- P1616 疯狂的采药
- P1616 疯狂的采药
- 疯狂的采药(采药升级版)
- java常用类:List接口常用方法
- [jzoj]1262. 为奶牛熄灯(迭代加深搜索+一堆优化vs记忆化vs状压DP)
- Redis脚本
- sdut-1117 C语言实验——求绝对值(选择结构)
- Error:此运算符的参数太多
- 【Luogu P1048 Luogu P1016】采药/疯狂的采药
- JAVA设计模式--单例模式
- python定向爬虫——爬取某代理Ip网站上的所有ip
- paly 框架Cannot load this JVM TI agent twice, check your java command line for duplicate jdwp options.
- Ext JS 6:将日期字段修改为日期时间字段(二)
- 完整版文本框即时输入数据监听并下拉显示匹配数据
- VS2013环境下配置OSG(3.4.0版本)
- 关注民生民情
- GUI——练习(列出制定目录内容)