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