HDU 2602Bone Collector 01背包问题
题意:给出一个t代表有t组数据,然后给出n,n代表有n种石头,v代表旅行者的背包容量,然后给出n种石头的价值和容量大小,求能带走的最大价值
思路:01背包问题,每种石头只有拿与不拿两种状态、(其实我是为理解dp而来的)
#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
const int qq=+; //开始数值写小了 只写了100+10
int value[qq];
int weight[qq];
int dp[qq][qq];
void kill(int n,int v)
{
for(int i=;i<=n;++i)
dp[][i]=dp[i][]=;
for(int j,i=;i<=n;++i)
for(j=;j<=v;++j)
if(j<weight[i])
dp[i][j]=dp[i-][j];
else if(dp[i-][j-weight[i]]+value[i]>dp[i-][j])
dp[i][j]=dp[i-][j-weight[i]]+value[i];
else
dp[i][j]=dp[i-][j];
}
int main()
{
int t,n,v;
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&v);
for(int i=;i<=n;++i)
scanf("%d",&value[i]);
for(int j=;j<=n;++j)
scanf("%d",&weight[j]);
kill(n,v);
printf("%d\n",dp[n][v]);
}
}
一维数组也能过、只是第二层必须反序来、顺序的话同一件物品可能会被取多次
#include<algorithm>
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
const int qq=;
int w[qq],v[qq];
int dp[qq];
int main()
{
int t;
scanf("%d",&t);
while(t--){
int n,m;
memset(dp,,sizeof(dp));
scanf("%d%d",&n,&m);
for(int i=;i<=n;++i)
scanf("%d",&v[i]);
for(int i=;i<=n;++i)
scanf("%d",&w[i]);
for(int i=;i<=n;++i)
for(int j=m;j>=v[i];--j) //一定记得是逆序、可以自己模拟一遍
dp[j]=max(dp[j],dp[j-w[i]]+v[i]);;
printf("%d\n",dp[m]);
}
return ;
}
贴一份WA的代码
#include<algorithm>
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
const int qq=;
int w[qq],v[qq];
int dp[qq][qq];
int main()
{
int t;
scanf("%d",&t);
while(t--){
int n,m;
memset(dp,,sizeof(dp));
scanf("%d%d",&n,&m);
for(int i=;i<=n;++i)
scanf("%d",&v[i]);
for(int i=;i<=n;++i)
scanf("%d",&w[i]);
for(int i=;i<=n;++i)
for(int j=w[i];j<=m;++j) //我开始还在想为什么这样不对
dp[i][j]=max(dp[i-][j],dp[i-][j-w[i]]+v[i]);
printf("%d\n",dp[n][m]);
}
return ;
}
//先出一组数据吧、
/* 1
5 0
2 4 1 5 1
0 0 1 0 0
这样的话在dp[3]的话是根本不会进入到第二层循环的、
也就是说dp[3][0]的值为0
*/
HDU 2602Bone Collector 01背包问题的更多相关文章
- HDU 2602 Bone Collector (01背包问题)
原题代号:HDU 2602 原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2602 原题描述: Problem Description Many yea ...
- HDU——2602Bone Collector(01背包)
Bone Collector Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- HDU 2955(01背包问题)
M - 01背包 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Descript ...
- ACM HDU Bone Collector 01背包
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2602 这是做的第一道01背包的题目.题目的大意是有n个物品,体积为v的背包.不断的放入物品,当然物品有 ...
- HDU 2955(0-1背包问题)
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87125#problem/M 题目: Description The aspir ...
- HDU-1864&&HDU-2602(01背包问题)
DP-01背包问题例题 输入处理有点恶心人,不过处理完后就是简单的DP了 从头开始dp[i]表示从0开始到i的最优结果,最后从都边里dp数组,求得最大的报销额. 对于每个i都要从头维护最优结果.(二刷 ...
- HDU 2602 Bone Collector(经典01背包问题)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2602 Bone Collector Time Limit: 2000/1000 MS (Java/O ...
- HDU 1864最大报销额 01背包问题
B - 最大报销额 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit St ...
- HDU 3466 Proud Merchants 带有限制的01背包问题
HDU 3466 Proud Merchants 带有限制的01背包问题 题意 最近,伊萨去了一个古老的国家.在这么长的时间里,它是世界上最富有.最强大的王国.因此,即使他们的国家不再那么富有,这个国 ...
随机推荐
- Vue--findIndex方法的使用原理
原理: // 根据id得到下标 // 默认去遍历list集合,将集合中的每个元素传入到function的item里, var index = this.list.findIndex(function( ...
- Windows系统MySQL8.0的安装教程
MySQL推出的8.0版本亮点多多,尤其是两倍的提速更让我们迫不及待地安装一睹为快.然而目前我们所用的版本还在5.7之前,今天小编给家分享一下MySQL8.0的安装,尤其是多版本MySQL的共存. 方 ...
- SpringMVC截图版
Lib目录 java目录 HelloController文件代码 AnotationController文件代码 DataController文件代码 ValueController文件代码 File ...
- 【Pyqt5】自定义信号简单原理(易懂版),多窗口交互,传输数据,调用方法
PS:如果你想在2窗口调用1窗口的内部方法,或者在2窗口传递数据给1窗口数据,本片博客可以放心食用 主窗口: class MainWindow(QWidget,Ui_MainFrom): insert ...
- 微信端的user-Agent
在iPhone下,返回 Mozilla/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Ge ...
- 跨境网上收款 找PayPal没错(php如何实现paypal支付)
开发前准备 在我的博客中 有介绍如何获取ID 和 secret : 好了 在上一篇博客中详细介绍了也不少: 跨境网上收款 找PayPal没错(如何获取ID 和 secret) http://blog. ...
- oracle 共享服务器监控
1. 观察sga的使用情况 select * from v$sgastat where pool=’large pool’; 2. 观察调度程序是否充足: 首先看每个调度程序的忙闲: sele ...
- 阿里云发布Apsara SA系列混合云存储阵列
3月21日,2019北京阿里云峰会上,阿里云正式发布Apsara SA系列混合云存储阵列,融合IP SAN,FC SAN,NAS和OSS对象存储协议于一体,同时实现了本地数据中心架构和公共云存储的无缝 ...
- USACO93网络流入门Drainage Ditches 排水渠(DCOJ 5130)
题目描述 (传送门:http://poj.org/problem?id=1273翻译 by sxy(AFO的蒟蒻)) 每次约翰的农场下雨,Bessie的水池里的四叶草就会被弄破.这就意味着,这些四叶草 ...
- JavaScript--查看代码运行效率console.time()与console.timeEnd()用法
程序运行时间计算: <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...