之前背包问题学了忘学了忘= =是太笨了。

题目

许多年前,在泰迪的家乡,有一个人被称为“骨收集者”。这个人喜欢收集各种骨头,例如狗,牛的骨头,他也去了坟墓……
骨头收集者有一个大袋子,里面装有V,而且在收集骨头的过程中,很明显,不同的骨骼具有不同的值和不同的体积,现在给定沿途的每个骨骼的值,您能否计算出骨骼收集器可以获得的总值的最大值?

输入格式

第一行包含整数T,即案例数。紧随其后的是T个案例,每个案例三行,第一行包含两个整数N,V(N <= 1000,V <= 1000),它们表示骨头的数量和包的体积。第二行包含代表每个骨骼值的N个整数。第三行包含N个整数,代表每个骨骼的体积。

输出格式

每行一个整数,代表合计的最大值(该数字将小于2 [sup] 31 [/ sup])。

输入样例

1
5 10
1 2 3 4 5
5 4 3 2 1

输出样例

14

二维数组

问题分解:当前最优解,要么包含第i种物品,要么不包含第i种物品。
DP[i][j]表示前i个物品,背包容量为j的最优值。
状态转移方程为:DP[i][j] = max(DP[i-1][j], DP[i-1][j-v[i]] + w[i]);

#include<bits/stdc++.h>
using namespace std;
int n,m,t;
int dp[1100][1100],w[1100],v[1100];
int main(){scanf("%d",&t);while(t--){memset(dp,0,sizeof(dp));scanf("%d %d",&n,&m);for(int i=1;i<=n;i++) scanf("%d",&w[i]);     //骨骼值 for(int i=1;i<=n;i++) scanf("%d",&v[i]);     //体积 for(int i=1;i<=n;i++){for(int j=0;j<=m;j++){if(j>=v[i])dp[i][j]=max(dp[i-1][j],dp[i-1][j-v[i]]+w[i]);elsedp[i][j]=dp[i-1][j];     //保留之前的状态 }}printf("%2d ",dp[n][m]);}return 0;
}

一维数组

和二维数组的差不多,不过就是把二维保存的值放到一维数组中
状态转移方程dp[j]=max(dp[j],dp[j-v[i]]+w[i]);,保证每轮和上轮可以用的比,保证3比2,2比1。

#include<bits/stdc++.h>
using namespace std;
int n,m,t;
int dp[1100],w[1100],v[1100];
int main(){scanf("%d",&t);while(t--){memset(dp,0,sizeof(dp));scanf("%d %d",&n,&m);for(int i=0;i<n;i++) scanf("%d",&w[i]);     //骨骼值for(int i=0;i<n;i++) scanf("%d",&v[i]);     //体积for(int i=0;i<n;i++){for(int j=m;j>=v[i];j--){       dp[j]=max(dp[j],dp[j-v[i]]+w[i]);}}printf("%d\n",dp[m]);}return 0;
}

如果有说错的地方,欢迎指错~~
欢迎来我个人博客玩(交换友链)

HDU Bone Collector (01背包问题)相关推荐

  1. hdu 2602 Bone Collector 01背包

    Bone Collector Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  2. hdu 2602 Bone Collector(01背包)模板

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2602 Bone Collector Time Limit: 2000/1000 MS (Java/Ot ...

  3. Bone Collector(01背包问题-两种写法)

    Many years ago , in Teddy's hometown there was a man who was called "Bone Collector". This ...

  4. HDU Problem 2062 Bone Collector【01背包】

    Bone Collector Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  5. HDU 2602 Bone Collector DP(01背包)

    Bone Collector Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Desc ...

  6. Bone Collector(骨头收集者)c++(01背包问题)

    题目来源:杭州电子科技大学 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...

  7. HD 2602 Bone Collector (0-1背包)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2602 Problem Description Many years ago , in Teddy's ...

  8. Bone Collector【01背包】

    F - Bone Collector HDU - 2602 Many years ago , in Teddy's hometown there was a man who was called &q ...

  9. HDU - 2639 Bone Collector II

    HDU - 2639 Bone Collector II dp之难,难于上青天. The title of this problem is familiar,isn't it?yeah,if you ...

最新文章

  1. linux cp 目录不存在自动创建,关于linux:Linux技巧cp命令自动创建不存在的目录和只复制修改的文件...
  2. 假如我是超级卷王......
  3. 开发日记-20190424 关键词 阶段性开发心得和小结
  4. 2019河北高职计算机专科学校录取分数线,2019河北高考专科院校录取分数线_专科各院校投档线_一品高考网...
  5. 小米+尚美的下沉CP,为酒店业释放了什么信号?
  6. vb Select Case的使用 字符串整形的转换 输入错误str的直接输出
  7. 汇编语言start标号的作用
  8. word中如何将所有字母一次修改成新罗马字体
  9. Java第二次作业第一题
  10. java爬虫技术的作用_Java网络爬虫怎么实现?
  11. 网关 跨域_好文推荐:微服务网关实战—Spring Cloud Gateway
  12. 学习JSP大学实用教程
  13. 《OpenCV3编程入门》学习笔记九:直方图与匹配
  14. ubuntu 12.04 安装intel i5-6500 的集成网卡驱动【自身经历,验证OK】
  15. 时域、频域与时域分析、频域分析简单理解
  16. 几行代码教你爬取LOL皮肤图片
  17. docker容器满了,如何清理内存
  18. 深入 JavaScript 中的默认参数!
  19. 电话机漏电流大引起电话交换机振铃
  20. 扫码枪回车键条码_条码扫描枪怎么设置换行?

热门文章

  1. python request url json和多层嵌套
  2. 网络安全学习方法论之体系到底有多重要?
  3. 红米mote使用java,华为P30 Pro vs 红米Note8 Pro: 用数据对决相机
  4. java API中文在线帮助文档各种链接
  5. redis集群密码设置
  6. 超长干货:基于Docker的DevOps CI/CD实践——来自iHealth的分享
  7. 艺术与云的创新融合: 亚马逊云科技助力英伦超豪华跑车品牌转身新能源
  8. 全国新冠疫苗接种剂次超13亿,未来将如何构建好“免疫长城”
  9. 面试题剖析:单例设计模式线程安全问题
  10. 【转载】天际智联的E-Link32下载器驱动失败安装问题