#include<iostream>usingnamespace std;int n, m;constint N =1010;int f[N][N],v[N],w[N];intmain(){int n, m;
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 =1; j <= m; j++){
f[i][j]= f[i -1][j];if(j >= v[i])f[i][j]=max(f[i][j], f[i -1][j-v[i]]+ w[i]);}}
cout << f[n][m];return0;}
一维版本
#include<iostream>usingnamespace std;int n, m;constint N =1010;int f[N],v[N],w[N];intmain(){int n, m;
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--){if(j >= v[i])f[j]=max(f[j], f[j-v[i]]+ w[i]);}}
cout << f[m];return0;}
#include<iostream>usingnamespace std;int n, m;constint N =1010;int f[N][N],v[N],w[N];intmain(){int n, m;
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 =1; j <= m; j++){
f[i][j]= f[i -1][j];if(j >= v[i])f[i][j]=max(f[i][j], f[i][j-v[i]]+ w[i]);}}
cout << f[n][m];return0;}
一维版本
#include<iostream>usingnamespace std;int n, m;constint N =1010;int f[N],v[N],w[N];intmain(){int n, m;
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 =1; j <= m; j++){if(j >= v[i])f[j]=max(f[j], f[j-v[i]]+ w[i]);}}
cout << f[m];return0;}