经典的0,1背包问题,将二维数组压缩为一维数组
#include<iostream>
using namespace std;
int dp[13000];
int weight[13000];
int value[13000];
int main()
{
int n,w_max;
cin>>n>>w_max;
for(int i=0;i<n;i++)
{
cin>>weight[i]>>value[i];
}
for(int i=0;i<n;i++)
{
for(int j=w_max;j>=weight[i];j--)
{
dp[j]=(dp[j]>(dp[j-weight[i]]+value[i]))?dp[j]:(dp[j-weight[i]]+value[i]);
}
}
cout<<dp[w_max]<<endl;
return 0;
}