1 1000 5 800 2 400 5 300 5 400 3 200 2
3900
背包问题。
1 #include<stdio.h> 2 #include<string.h> 3 #define max(a,b) a>b?a:b 4 int w[30],c[50],dp[205][30010]; 5 int main() 6 { 7 int N; 8 scanf("%d",&N); 9 while(N--) 10 { 11 int V,m; 12 scanf("%d%d",&V,&m); 13 int i,j; 14 for(i=0; i<m; i++) 15 scanf("%d%d",&w[i],&c[i]); 16 for(j=0; j<=m; j++) 17 dp[0][j]=0; 18 for(i=0; i<m; i++) 19 for(j=0; j<=V; j++) 20 if(j<w[i])dp[i+1][j]=dp[i][j]; 21 else 22 dp[i+1][j]=max(dp[i][j-w[i]]+w[i]*c[i],dp[i][j]); 23 printf("%d\n",dp[m][V]); 24 } 25 return 0; 26 }
NYOJ 49 【开心的小明】,布布扣,bubuko.com
原文:http://www.cnblogs.com/castledrv/p/3666333.html