【链接】:click here~~
【思路】基础01背包,注意第一排输入的是价值,第二排是体积。。
代码:
/* * Problem: HDU No.2602 * Running time: 46MS * Complier: C++ * Author: javaherongwei * Create Time: 10:14 2015/9/5 星期六 */ #include <bits/stdc++.h> using namespace std; typedef long long LL; const int N=1005; int dp[N]; int value[N],volume[N]; int n,V; int main() { int t;scanf("%d",&t); while(t--) { memset(dp,0,sizeof(dp)); memset(value,0,sizeof(value)); memset(volume,0,sizeof(volume)); scanf("%d %d",&n,&V); for(int i=0; i<n; ++i) scanf("%d",&value[i]); for(int i=0; i<n; ++i) scanf("%d",&volume[i]); for(int i=0; i<n; ++i) { for(int v=V; v>=volume[i]; --v) { dp[v]=max(dp[v],dp[v-volume[i]]+value[i]); } } printf("%d\n",dp[V]); } return 0; } /* Sample Input 1 5 10 1 2 3 4 5 5 4 3 2 1 Sample Output 14 */