二维数组的写法:
int w[N],p[N];
int dp[M][N];
for(int i=0; i<n; i++)
for(int j=0; j<=m; j++)
if(j<w[i])
dp[i+1][j]=dp[i][j];
else
dp[i+1][j]=max(dp[i][j],dp[i][j-w[i]]+p[i]);
cout<<dp[n][m]<<endl;
一维数组的写法:
int w[N],p[N],dp[N];
for(int i=0; i<n; i++)
cin>>w[i]>>p[i];
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],dp[j-w[i]]+p[i]);
cout<<dp[m]<<endl;