标签:
Description
Input
Output
Sample Input
1 5 10 1 2 3 4 5 5 4 3 2 1
Sample Output
14题意:第一行输入案例数,第二行输入两个整数N,V,分别代表骨头的数量和袋子的体积,接下来的两行分别有N个整数,分别代表骨头的价值和体积,问你在袋子装满的情况下价值最大,求出最大价值。思路:典型的0-1背包问题,让价值作为背包,value[i]代表骨头的体积,volume[i]代表骨头的体积,dp[i]代表骨头的价值,求出其最大值就好了。代码:#include<cstdio> #include<cstring> #include<algorithm> int value[1010];//价值 int volume[1010];//体积 int dp[1010];//价值作为背包 using namespace std; int main() { int T; int N,V; int sum; scanf("%d",&T); while(T--) { sum=0; 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]); //sum+=volume[i]; } memset(dp,0,sizeof(dp)); // dp[0]=0;//价值为0的时候肯定为V for(int i=0; i<N; i++) for(int j=V; j>=volume[i]; j--) dp[j]=max(dp[j],dp[j-volume[i]]+value[i]); printf("%d\n",dp[V]); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/a1967919189/article/details/47608879