这个完全背包不优化过不了(像我下面给出的代码)
//40pts
#include<bits/stdc++.h>
using namespace std;
int m,n;
int w[210],c[40];
int f[10086][12339]={};
int main(){
cin>>m>>n;
for(int i=1;i<=n;i++){
cin>>w[i]>>c[i];
}
for(int i=1;i<=n;i++){
for(int j=0;j<=m;j++){
for(int z=0;z*w[i]<=j;z++){
f[i][j]=max(f[i][j],f[i-1][j-z*w[i]]+z*c[i]);
}
}
}
cout<<f[n][m]<<endl;
return 0;
}
和
//60pts
#include<bits/stdc++.h>
using namespace std;
int m,n;
int w[210],c[40];
int f[10086][12339]={};
int main(){
cin>>m>>n;
for(int i=1;i<=n;i++){
cin>>w[i]>>c[i];
}
for(int i=1;i<=n;i++){
for(int j=0;j<=m;j++){
f[i][j]=f[i-1][j];
if(j>=w[i]){
f[i][j]=max(f[i][j],f[i][j-w[i]]+c[i]);
}
}
}
cout<<f[n][m]<<endl;
return 0;
}
记得优化一下,你看我提交记录就知道了