浅谈\(DP\):https://www.cnblogs.com/AKMer/p/10437525.html

题目传送门:https://www.luogu.org/problemnew/show/P1048

像这种给你\(n\)个物品,每个物品有占用体积和价值,求\(m\)体积的背包能装下的最大的价值的问题就是\(01\)背包问题。

我们可以设\(f[i][j]\)表示从前\(i\)个物品中选取一些占用\(j\)的体积可以装的最大的价值。

那么转移如下:

\(f[i][j]=f[i-1][j](j<weight_i)\)

\(f[i][j]=max(f[i][j],max(f[i-1][j],f[i-1][j-weight_i]+value_i))(weight_i\leqslant j \leqslant m)\)

时间复杂度:\(O(nm)\)

空间复杂度:\(O(nm)\)

代码如下:

#include <cstdio>
#include <algorithm>
using namespace std; const int maxT=1005,maxm=105; int T,m;
int f[maxm][maxT]; int read() {
int x=0,f=1;char ch=getchar();
for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
for(;ch>='0'&&ch<='9';ch=getchar())x=x*10+ch-'0';
return x*f;
} int main() {
T=read(),m=read();
for(int i=1;i<=m;i++) {
int tim=read(),val=read();
for(int j=0;j<tim;j++)f[i][j]=f[i-1][j];
for(int j=tim;j<=T;j++)
f[i][j]=max(f[i][j],max(f[i-1][j],f[i-1][j-tim]+val));
} printf("%d\n",f[m][T]);
return 0;
}

但是实际上我们可以把第一维省掉,然后倒着枚举体积。因为体积大的状态总是由体积小的状态更新得来,所以我倒着枚举体积实际上还是用的\(i-1\)个物品的状态来更新我当前加入第\(i\)个物品之后的状态。

时间复杂度:\(O(nm)\)

空间复杂度:\(O(m)\)

代码如下:

#include <cstdio>
#include <algorithm>
using namespace std; const int maxT=1005,maxm=105; int T,m;
int f[maxT]; int read() {
int x=0,f=1;char ch=getchar();
for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
for(;ch>='0'&&ch<='9';ch=getchar())x=x*10+ch-'0';
return x*f;
} int main() {
T=read(),m=read();
for(int i=1;i<=m;i++) {
int tim=read(),val=read();
for(int j=T;j>=tim;j--)
f[j]=max(f[j],f[j-tim]+val);
}
printf("%d\n",f[T]);
return 0;
}

最新文章

  1. 每天一个percona 工具 --- pt-kill
  2. 部署IISHTTP 404.17无法由静态文件处理程序来处理
  3. HTML DOM scale() 方法
  4. 转来的。。。 关于return 的一些事情
  5. Java基础(41):Java中集合中需要注意的几个要点(关于Collection与Map)
  6. db2中修改表字段的长度,查看表字段长度,以及查看表字段已存放值大小
  7. SQL Server分区动态生成脚本(三)(按年份划分)
  8. Python 常见错误
  9. web报表工具FineReport的JS编辑框和URL地址栏语法简介
  10. EventBus3.0 study
  11. #利用openCV裁脸
  12. django pymysql
  13. rsync用于数据迁移/备份的几个细节
  14. 牛客网数据库SQL实战(1-5)
  15. java new关键字
  16. ML之监督学习算法之分类算法一 ———— k-近邻算法(最邻近算法)
  17. ThinkPHP内置日志记录
  18. python-并发测试用例
  19. Atcoder arc077 D - 11 组合
  20. [LeetCode系列]有序链表转换为平衡BST的递归解法

热门文章

  1. 去duplicate的方法
  2. html5-entities.js消失问题
  3. axios拦截器/http
  4. INSPIRED启示录 读书笔记 - 第23章 改进现有产品
  5. How to Delete using INNER JOIN with SQL Server?
  6. LeetCode——max-points-on-a-line
  7. java多线程(内附实例:窗口售票问题、人和叉子的问题)
  8. Intel微处理结构.docx
  9. nova Evacuate
  10. js的constructor