题目描述:http://poj.org/problem?id=3624
基本的01背包
dp[i-1][v]=max{dp[i-1][v],dp[i-1][v-weight[i]]+value[i]}
#include<stdio.h> #include<memory.h> int max(int a,int b) { return a>b?a:b; } int w[3500],v[3500],dp[13000]; void main() { int n,m,i,j,sum; scanf("%d%d",&n,&m); sum=0; memset(dp,0,sizeof(dp)); for(i=0;i<n;i++) { scanf("%d %d",&w[i],&v[i]); } for(i=0;i<n;i++) { for(j=m;j>=0;j--) { if(j>=w[i]) dp[j]=max(dp[j],dp[j-w[i]]+v[i]); else dp[j]=dp[j]; } } printf("%d\n",dp[m]); }