当前位置: 首页 > news >正文

【DP复习】背包 ovo

水题10s切得pj-的那种QAQ

 P1048 采药  (01)

 1 #include<cstdio>
 2 #include<iostream>
 3 using namespace std;
 4 const int sz = 1010;
 5 int dp[sz], val[sz], tim[sz];
 6 int t, m;
 7 int main() {
 8     scanf("%d%d", &t, &m);
 9     for(int i = 1; i <= m; i++) 
10         scanf("%d%d", &tim[i], &val[i]);
11     for(int i = 1; i <= m; i++) {
12         for(int j = t; j >= 0; j--) {
13             if(j >= tim[i])
14                 dp[j] = max(dp[j - tim[i]] + val[i], dp[j]);
15         }
16     }
17     printf("%d", dp[t]);
18     return 0;
19 }

 P1049 装箱问题  (01)

 1 #include<cstdio>
 2 #include<iostream>
 3 using namespace std;
 4 const int sz = 20020;
 5 int n, m, use[sz], dp[sz];
 6 int main() {
 7     scanf("%d%d", &m, &n);
 8     for(int i = 1; i <= n; i++) 
 9         scanf("%d", &use[i]);
10     for(int i = 1; i <= n; i++) {
11         for(int j = m; j >= 0; j--) {
12             if(j >= use[i])
13                 dp[j] = max(dp[j - use[i]] + use[i], dp[j]);
14         }
15     }
16     printf("%d",m - dp[m]);
17     return 0;
18 }

 P1060 开心的金明  (01)

 1 #include<cstdio>
 2 #include<iostream>
 3 using namespace std;
 4 const int sz = 30030;
 5 int dp[sz], val[sz], mon[sz];
 6 int n, m;
 7 int main() {
 8     scanf("%d%d", &m, &n);
 9     for(int i = 1; i <= n; i++) 
10         scanf("%d%d", &mon[i], &val[i]);
11     for(int i = 1; i <= n; i++) {
12         for(int j = m; j >= 0; j--) {
13             if(j >= mon[i]) 
14                 dp[j] = max(dp[j - mon[i]] + val[i] * mon[i], dp[j]);
15         }
16     }
17     printf("%d", dp[m]);
18     return 0;
19 }

 P1616 疯狂的采药  (完全)

 1 #include<cstdio>
 2 #include<iostream>
 3 using namespace std;
 4 const int maxt = 100010, maxm = 10010;
 5 int n, m, dp[maxt], val[maxm], tim[maxm];
 6 int main() {
 7     scanf("%d%d", &m, &n);
 8     for(int i = 1; i <= n; i++)
 9         scanf("%d%d", &tim[i], &val[i]);
10     for(int i = 1; i <= n; i++) {
11         for(int j = 1; j <= m; j++) {
12             if(j >= tim[i]) 
13                 dp[j] = max(dp[j - tim[i]] + val[i], dp[j]);
14         }
15     }
16     printf("%d", dp[m]);
17     return 0;
18 }

 P2722 总分 Score Inflation (完全/usaco)

 1 #include<cstdio>
 2 #include<iostream>
 3 using namespace std;
 4 const int sz = 10010;
 5 int n, m, dp[sz], val[sz], tim[sz];
 6 int main() {
 7     scanf("%d%d", &m, &n);
 8     for(int i = 1; i <= n; i++) {
 9         scanf("%d%d", &val[i], &tim[i]);
10         for(int j = 1; j <= m; j++) {
11             if(j >= tim[i])
12                 dp[j] = max(dp[j - tim[i]] + val[i], dp[j]);
13         }
14     }
15     printf("%d", dp[m]);
16     return 0;
17 }

P2347 砝码称重 (01背包求方案数)

dp[j] 剩余体积为j时的方案数 

不选dp[j] = dp[j] 选 dp[j] = dp[j - f[i]]

 1 #include<cstdio>
 2 #include<iostream>
 3 using namespace std;
 4 int num[7] = {0, 1, 2, 3, 5, 10, 20};
 5 int dp[1010], f[1010], k, cnt = 0, ans = 0, m;
 6 int main() {
 7     for(int i = 1; i <= 6; i++) {
 8         scanf("%d", &k);
 9         for(int j = 1; j <= k; j++)
10             f[++cnt] = num[i], m += f[cnt];
11     }
12     dp[0] = 1;
13     for(int i = 1; i <= cnt; i++) 
14         for(int j = m; j >= 0; j--) 
15             if(j >= f[i]) dp[j] = dp[j] + dp[j - f[i]];
16     for(int i = 1; i <= m; i++) if(dp[i]) ans++;//是ans++不是 ans += dp[i] 因为不能算重复的qwq 
17     printf("Total=%d", ans);
18     return 0;
19 }

 

 P1164 小A点菜 (01 背包求方案数)

和上一个题区别, 上一题要求输出总共多少种方案, 不需要用尽空间, 这一题需要将空间用尽, 所以 dp[m]即答案

 1 #include<cstdio>
 2 #include<iostream>
 3 using namespace std;
 4 const int maxn = 110, maxm = 10010;
 5 int n, m;
 6 int dp[maxm], p[maxn];
 7 int main() {
 8     scanf("%d%d", &n, &m);
 9     for(int i = 1; i <= n; i++) 
10         scanf("%d", &p[i]);
11     dp[0] = 1;
12     for(int i = 1; i <= n; i++) 
13         for(int j = m; j >= p[i]; j--)
14             dp[j] = dp[j] + dp[j - p[i]];
15     printf("%d", dp[m]);
16     return 0; 
17 } 

 

转载于:https://www.cnblogs.com/Hwjia/p/9873094.html

相关文章:

  • CSS3 Transform变形(3D转换)
  • Python——数据存储:XML操作
  • python 求助!
  • OpenGL step by step 38 : Skeletal Animation with Assimp
  • 顺为资本第四期美元基金募集完成 规模12.1亿美元
  • 【经验分享】:如何将PDF格式的文件进行翻译
  • 当奶猫来敲门
  • Jquery attr()方法 属性赋值和属性获取
  • [译] Google 工程师提升网页性能的新策略:空闲执行,紧急优先
  • 程序员的炼金术,如何用技术变现
  • java中如何使用Junit测试
  • 马斯克放大招!直逼高铁时速的240km h汽车隧道挖成了!
  • 书摘—松下幸之助全传
  • [洛谷P3567][POI2014]KUR-Couriers
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • Java反射-动态类加载和重新加载
  • PHP 小技巧
  • socket.io+express实现聊天室的思考(三)
  • Solarized Scheme
  • 实现简单的正则表达式引擎
  • 因为阿里,他们成了“杭漂”
  • 用 Swift 编写面向协议的视图
  • Prometheus VS InfluxDB
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • #includecmath
  • #控制台大学课堂点名问题_课堂随机点名
  • (4.10~4.16)
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (南京观海微电子)——COF介绍
  • (四)Android布局类型(线性布局LinearLayout)
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (转)IOS中获取各种文件的目录路径的方法
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .Net 8.0 新的变化
  • .net framework 4.0中如何 输出 form 的name属性。
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • ??eclipse的安装配置问题!??
  • @Valid和@NotNull字段校验使用
  • [android]-如何在向服务器发送request时附加已保存的cookie数据
  • [Android实例] 保持屏幕长亮的两种方法 [转]
  • [android学习笔记]学习jni编程
  • [Asp.net mvc]国际化
  • [AutoSar NVM] 存储架构
  • [BUG] Authentication Error
  • [C++]高精度 bign (重载运算符版本)
  • [docker] Docker的私有仓库部署——Harbor
  • [Editor]Unity Editor类常用方法
  • [EULAR文摘] 利用蛋白组学技术开发一项蛋白评分用于预测TNFi疗效
  • [Java算法分析与设计]--线性结构与顺序表(List)的实现应用
  • [leetcode] 3Sum
  • [LeetCode]-Pascal's Triangle III 杨辉三角问题
  • [Lucene] Lucene 全文检索引擎简介