朴素

#include<iostream>
#include<algorithm>
using namespace std ;
const int N=;
int n,m;
int v[N],w[N];
int f[N][N];
int main() {
cin>>n>>m;//n个物品 最大体积位m
for(int i=; i<=n; i++) cin>>v[i]>>w[i];
for(int i=; i<=n; i++)
for(int j=; j<=m; j++)
for(int k=; k*v[i]<=j; k++)//选k个第i个物品
f[i][j]=max(f[i][j],f[i-][j-v[i]*k]+k*w[i]);
cout<<f[n][m]<<endl;
return ;
}

优化二维

//01背包从i-1转移过来   而完全背包是从第
i层转移过来
#include <iostream>
#include <algorithm>
using namespace std;
const int N = ;
int n, m;
int v[N], w[N];
int f[N][N];
int main() {
cin >> n >> m;
for (int i = ; i <= n; i ++ ) cin >> v[i] >> w[i];
for (int i = ; i <= n; i ++ )
for (int j = ; j <= m; j ++ )
for(int k=; k*v[i]<=j; k++)
f[i][j] = max(f[i][j], f[i-][j - v[i]*k] + w[i]*k);
cout << f[n][m] << endl;
return ;
}

终极一维

//一维
#include <iostream>
#include <algorithm>
using namespace std;
const int N = ;
int n, m;
int v[N], w[N];
int f[N];
int main() {
cin >> n >> m;//n是数量,m是体积
for (int i = ; i <= n; i ++ )
cin >> v[i] >> w[i];
for (int i = ; i <= n; i ++ )
for (int j = v[i]; j <= m; j ++ )
f[j] = max(f[j], f[j - v[i]] + w[i]);
cout << f[m] << endl;
return ;
}

最新文章

  1. ios h5 app avalon tap点击事件失效及点击延迟300ms问题解决方法
  2. 《javascript高级程序设计》第三章学习笔记
  3. C++中的链接错误
  4. MSSERVER创建链接服务器
  5. CSS3.0盒模型display:-webkit-box;的使用
  6. Android 中SimpleDateFormat的使用注意
  7. 真正意义上下一代 Windows Embedded:有关 Windows 10 &quot;Athens&quot; 的事
  8. webapp框架集合
  9. JavaScript的DOM操作(一)
  10. 瞎j8封装第二版之数据库连接池
  11. 新概念英语(1-101)A Card From Jimmy
  12. Scrum Meeting 合集
  13. Python开发【第九篇】:协程、异步IO
  14. 翻转一个数组(c++实现)
  15. python学习日记(数据结构习题)
  16. time 模块 与 datetime 模块
  17. 洛谷P3225 HNOI2012 矿场搭建
  18. LoadRunner接口测试标准模板
  19. 关于购物车程序的Python实现
  20. 1.3.2、CDH 搭建Hadoop在安装之前(端口---Cloudera Navigator加密使用的端口)

热门文章

  1. CF840D[Destiny] [主席树板子]
  2. LTC
  3. python multiprocessing 耗内存问题
  4. word的一些运用技巧
  5. Leetcode 995. K 连续位的最小翻转次数
  6. .NetCore学习笔记:二、基于Dapper的泛型Repository
  7. 阿里云oss 直传
  8. RYU安装教程
  9. 题解【AcWing487】金明的预算方案
  10. [HNOI2003] 消防局的设立 - 树形dp