采药/疯狂的采药

两道模板题,分别是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. HTML5新标签 w3c
  2. 16位汇编 多文件 intel汇编 编译器masm5.0 调用子程序库即静态库的自定义函数 WINDOWS
  3. salesforce 零基础学习(十六)Validation Rules &amp; Date/time
  4. WPF线程(Step2)&mdash;&mdash;BackgroundWorker
  5. button hot key 热键
  6. 动态链接库(DLL)总结
  7. ajax XML
  8. Gulp-前端进阶A-2
  9. 教你如何利用xml格式的sitemap文件做好SEO
  10. Web网站压力测试工具
  11. Sass介绍及入门教程
  12. OpenCV 通过 MFC 的 Picture Control 控件操作图像
  13. 乐在其中设计模式(C#) - 迭代器模式(Iterator Pattern)
  14. memcached内存管理
  15. uva10003 区间DP
  16. GitHub上最火的Android开源项目整理
  17. JSP编译成Servlet(四)JSP与Java行关系映射
  18. Python 命令行(CLI)基础库
  19. sybase central 报 NullPointerException 解决
  20. 深入理解JAVA虚拟机(内存模型+GC算法+JVM调优)

热门文章

  1. javascript核心基础总结
  2. 对于Serializable的理解
  3. VBoxManage.exe: error: Failed to instantiate CLSID_VirtualBox w/ IVirtualBox, CL SID_VirtualBox w/ IUnknown works.
  4. mybatis-spring 启动过程和调用过程
  5. 哪种方式更适合在React中获取数据?
  6. [2018-01-12] laravel--ORM
  7. Lost My Music:倍增实现可持久化单调栈维护凸包
  8. %%%GXZ大佬回关
  9. 通俗易懂了解Vue组件的生命周期
  10. UiPath之如何打印PDF