题意:有一个容量 volume 的背包,有一个个给定体积和价值的骨头,问最多能装价值多少。
经典的 01 背包问题不谈,再不会我就要面壁了。
终于有一道题可以说水过了 ……心好累
1 #include<stdio.h> 2 #include<string.h> 3 #define max(a,b) a>b?a:b 4 5 int va[1005],vo[1005],dp[1005]; 6 7 int main(){ 8 int T; 9 while(scanf("%d",&T)!=EOF){ 10 for(int q=1;q<=T;q++){ 11 memset(dp,0,sizeof(dp)); 12 int n,v; 13 int i,j,ans=0; 14 scanf("%d%d",&n,&v); 15 for(i=1;i<=n;i++)scanf("%d",&va[i]); 16 for(i=1;i<=n;i++){ 17 scanf("%d",&vo[i]); 18 for(j=v;j>=vo[i];j--){ 19 dp[j]=max(dp[j],dp[j-vo[i]]+va[i]); 20 ans=max(dp[j],ans); 21 } 22 } 23 printf("%d\n",ans); 24 } 25 } 26 return 0; 27 }
时间: 2024-10-12 03:39:34