博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU-2602 Bone Collector——01背包
阅读量:7112 次
发布时间:2019-06-28

本文共 1112 字,大约阅读时间需要 3 分钟。

首先输入一个数字代表有n个样例 

接下来的三行

第一行输入n  和  v,代表n块骨头,背包体积容量为v。

第二行输入n块骨头的价值

第三行输入n块骨头的体积

问可获得最大的价值为多少

核心:关键在于dp【j】=max(dp[j],dp[j-w[i]]+v[i]) 的状态转移!!

背包最多能装下题目中所给的骨头,如体积为10的背包能装下体积分别为5和4的体积一块,

但最后其实背包还剩余了体积为1的位置没有讨论,则通过 j-- 进行剩余补充讨论。

在体积不断减小的同事每次都对目前这个这个体积(目前状态)下最多能装多少已知的骨头,

并通过对比之前的数据(上一次的状态)取较大值。即可获得该目标体积的最大值!!

#include 
#include
#include
#include
#include
#define ll long longusing namespace std;int a[1005];int b[1005];int dp[1005];int main(){ int m,n,k,t; cin>>t; while(t--) { memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(dp,0,sizeof(dp)); cin>>m>>n; for(int i=1;i<=m;i++) { cin>>a[i]; }//价值 for(int i=1;i<=m;i++) { cin>>b[i]; }//体积 for(int i=1;i<=m;i++) { for(int j=n;j>=0;j--) { if(j>=b[i]) dp[j] = max(dp[j],dp[j-b[i]]+a[i]); } } cout<
<

 

转载于:https://www.cnblogs.com/tonyyy/p/10436636.html

你可能感兴趣的文章
Motion JPEG in Flash and Java
查看>>
Linq的分组功能
查看>>
使用 Jackson 树连接线形状
查看>>
学习mysql代码的方法和目标
查看>>
【读后感】暗时间
查看>>
终于找到IE10 Browser Mode为IE10 compat View的真相
查看>>
STL priority_queue<> 用法 <转>
查看>>
异常Address already in use: JVM_Bind的处理
查看>>
Unix/Linux 脚本中 “set -e” 的作用
查看>>
静观----冥想
查看>>
使用 IntraWeb (23) - 基本控件之 TIWTimer、TIWProgressBar、TIWProgressIndicator、TIWTimeEdit...
查看>>
SQLServer如何处理数据集的维度变化
查看>>
了解SVG
查看>>
【读书笔记-数据挖掘概念与技术】数据预处理
查看>>
嵌入式开发之davinci--- ccs 编译lib库
查看>>
CUDA程序设计(一)
查看>>
iOS随机颜色
查看>>
mybatis-generator自动生成dao,mapping,model
查看>>
阿里云服务器的坑=====部署EF+MVC
查看>>
docker学习笔记17:Dockerfile 指令 ONBUILD介绍
查看>>