01背包:
#include <iostream>
using namespace std;
const int N = 1010;
int n,m;
int dp[N],w[N],v[N];
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>v[i]>>w[i];
for(int i=1;i<=n;i++)
for(int j=m;j>=v[i];j--)
dp[j] = max(dp[j],dp[j-v[i]]+w[i]);
cout<<dp[m];
return 0;
}
完全背包:
#include <iostream>
using namespace std;
const int N = 1010;
int n,m;
int dp[N],w[N],v[N];
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>v[i]>>w[i];
for(int i=1;i<=n;i++){
for(int j=v[i];j<=m;j++){
dp[j] = max(dp[j],dp[j-v[i]]+w[i]);
cout<<dp[m];
return 0;
}
区别仅仅是内层循环的顺序,一个是v[i]到m,一个是m到v[i]