题目链接:http://poj.org/problem?id=3624
//典型01背包问题 //状态转移方程dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i]]+d[i]) //实现:逆序 #include<iostream> #include<cstring> #include<algorithm> #include<cmath> using namespace std; const int maxn=20000; const int maxc=20000; int n,m; //n为珠宝数量,m为背包容量 int w[maxn],d[maxn]; //分别为每个珠宝的重量和诱人度 int dp[maxc]; int bp(){ memset(dp,0,sizeof(dp)); for(int i=0;i<=n;i++) { for(int j=m;j>=w[i];j--) dp[j]=max(dp[j-w[i]]+d[i],dp[j]); } return dp[m]; } int main (){ cin>>n>>m; for(int i=1;i<=n;i++) cin>>w[i]>>d[i]; cout<<bp()<<endl; return 0; }