这题有一点需要注意就是的写成一维数组。二位数组会超内存的(12880*3402*4/1024>65535)
这是二维的
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int v[3404],w[3404];
int bag[3404][12882];
int main(void){
int n,m,i,j;
cin>>n>>m;
for(i=1;i<=n;i++)
cin>>w[i]>>v[i];
memset(bag,0,sizeof(bag));
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(j>w[i])
if(big[i-1][j-w[i]]>big[i-1][j])
big[i][j]=big[i-1][j-w[i]];
else
big[i][j]=big[i-1][j];
else
big[i][j]=big[i-1][j];
cout<<big[n][m]<<endl;
return 0;
}
这是一维的
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int v[3404],w[3404];
int bag[12882];
int main(void){
int n,m,i,j;
cin>>n>>m;
for(i=1;i<=n;i++)
cin>>w[i]>>v[i];
memset(bag,0,sizeof(bag));
for(i=1;i<=n;i++)
for(j=m;j>=w[i];j--)
if(bag[j-w[i]]+v[i]>bag[j])
bag[j]=bag[j-w[i]]+v[i];
cout<<bag[m]<<endl;
return 0;
}