Description
题意描述:
小陈要去西藏旅游了,他开始收拾去旅游要带的东西,他选出N件物品,每件物品有一定的体积和价值,可惜小陈的包的容量只有M,因此小陈可能没办法把所有的东西都带上,但是他想带上价值尽量大的物品,当然前提是他的包装得下。作为一名优秀的程序猿,小陈决定要打一个程序来帮他选择。你觉得他能做到吗?
Input
第一行是样例个数T(T<=100)
每个样例以两个正整数N,M(N<=1000,M<=10000)开头,含义见题意描述
接下来N行,每行两个正整数vol(vol<=M)和val(val<=10000),分别是一件物品的体积和价值
Output
每个样例输出一行,小陈能带上的最大价值
Sample Input
2 3 10 4 5 5 4 2 3 4 15 4 6 5 7 6 8 8 12
Sample Output
9 21
#include<iostream> #include<cstring> using namespace std; int dp[10005]; int main() { int i,j,k,m,n; int v[1005]; int c[1005]; int V,M,T; cin>>T; while(T--) { cin>>n>>m; for(i=0;i<n;i++) { cin>>c[i]>>v[i]; } memset(dp,0,sizeof(dp)); for(i=0;i<n;i++) for(j=m;j>=c[i];j--) dp[j]=max(dp[j],dp[j-c[i]]+v[i]); cout<<dp[m]<<endl; } }