GREEDY不能保证最优,使用DP
#include <iostream>
using namespace std;
const int MAX_NUM=3410;
const int MAX_WEIGHT=12890;
int weight[MAX_NUM];
int desir[MAX_NUM];
int dp[MAX_WEIGHT];//空间压缩
void fun(int n,int max_w){
for (int i=0; i<n; ++i) {
//使用一维数组,j需递减
for (int j=max_w; j>=weight[i]; --j) {
if (dp[j-weight[i]]+desir[i]>dp[j]) {
dp[j]=dp[j-weight[i]]+desir[i];
}
}
}
cout<<dp[max_w]<<endl;
}
int main(){
//freopen("xxx.in", "r", stdin);
int n,max_w;
cin>>n>>max_w;
for (int i=0; i<n; ++i) {
cin>>weight[i]>>desir[i];
}
fun(n, max_w);
return 0;
}