码迷,mamicode.com
首页 > 其他好文 > 详细

!HDU 2602 Bone Collector--DP--(裸01背包)

时间:2015-06-03 21:35:35      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:hdu   dp   

题意:这题就是一个纯粹的裸01背包

分析:WA了好几次,01背包实现的一些细节没搞懂

1.为什么dp[i][j]赋初值为0而不是value[i],因为第i个石头可能不放!

2.在进行状态转移之前要dp[i][j]=dp[i-1][j],不然肯定会WA啊,想想就明白了

3.最终结果是dp[n][v],不是每次求mx,因为状态转移就是这么推的啊

代码:

#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
long long dp[1001][1001],va[1001],mx;
int t,n,v,vo[1001];
int main()
{
	cin>>t;
	while(t--){
		cin>>n>>v;
		mx=-1;
		for(int i=1;i<=n;i++) cin>>va[i];
		for(int i=1;i<=n;i++) cin>>vo[i];
		for(int i=1;i<=n;i++) for(int j=0;j<=v;j++) dp[i][j]=0;  //错误1
		for(int i=1;i<=n;i++){
			for(int j=0;j<=v;j++){
				dp[i][j]=dp[i-1][j];                    //错误2
				if(vo[i]<=j) dp[i][j]=dp[i][j]>dp[i-1][j-vo[i]]+va[i]?dp[i][j]:dp[i-1][j-vo[i]]+va[i];
			}
		    
		}
		mx=dp[n][v];     //错误3
		cout<<mx<<endl;
	}
}


!HDU 2602 Bone Collector--DP--(裸01背包)

标签:hdu   dp   

原文地址:http://blog.csdn.net/ac_0_summer/article/details/46351007

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!