看来以后做题务必要看清题意,这道题的意思就是背包可以不用装满,而我非要按照装满的情况来处理,WA了两次
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<algorithm>
using namespace std;
int N,M,W[3405],D[3405],V[12885];
int main()
{
int i,j;
scanf("%d %d",&N,&M);
for(i=1;i<=N;i++)
scanf("%d %d",&W[i],&D[i]);
for(i=1;i<=N;i++)
for(j=M;j>=W[i];j--)//要保留第i个物品到来时前i-1个物品在背包中的
V[j]=max(V[j],V[j-W[i]]+D[i]); //状态,所以必须要逆序
printf("%d\n",V[M]);
system("pause");
return 0;
}