hdu 2602 Bone Collector(0 1背包)

//第一次提交:WA
//原因:for(int j=V;j>=0;j--)此处j写成了j>0,但是此题可能会有重量
//为0,但价值不为0的情况
//5 0
//2 4 1 5 1
//0 0 1 0 0
//输出结果应该为2+4+5+1=12
#include<iostream>
using namespace std;
int n;
int N,V;
int dp[1005];
int value[1005];
int volume[1005];

int main(){
	cin>>n;
	while(n--){
		memset(dp,0,sizeof(dp));
		cin>>N>>V;
		for(int i=1;i<=N;i++){
			cin>>value[i];
		}
		for(int i=1;i<=N;i++){
			cin>>volume[i];
		}
		for(int i=1;i<=N;i++){
			for(int j=V;j>=0;j--){
				if(j-volume[i]>=0)
					dp[j]=max(dp[j],dp[j-volume[i]]+value[i]);
			}
		}
		cout<<dp[V]<<endl;
	}
	return 0;
}

你可能感兴趣的:(hdu 2602 Bone Collector(0 1背包))