3 3 3 7 7 9 9 10 5 1 1 5 3 10 3 6 8 7 5 6
10 20
#include <stdio.h> #include <string.h> #define MAX 100000 int dp[MAX+10] ; int value[110],w[110] ; int max(int a , int b) { return a>b?a:b ; } int main() { int n , m; while(~scanf("%d",&n)) { memset(dp,0,sizeof(dp)) ; for(int i = 0 ; i < n ; ++i) { scanf("%d%d",&w[i],&value[i]) ; } scanf("%d",&m); for(int i = 0 ; i < n ; ++i) { for(int j = value[i] ; j <= m ; ++j) { dp[j] = max(dp[j],dp[j-value[i]]+w[i]) ; } } printf("%d\n",dp[m]) ; } return 0 ; }
原文:http://blog.csdn.net/lionel_d/article/details/44538051