优化后的,空间复杂度 O(n)
#include <iostream>
using namespace std;
int dfs(int *size, int *value, int C, int num) {
int *dp = new int[C+1];
for (int i = 0; i < C+1; i++)
dp[i] = 0;
for (int i = 1; i <= num; i++) {
for (int j = C; j >= size[i]; j--)
dp[j] = max(dp[j], dp[j-size[i]]+value[i]);
}
return dp[C];
}
int main() {
int num, C;
cin>>num>>C;
int *size = new int[num+1];
int *value = new int[num+1];
for (int i = 1; i <= num; i++)
cin >> size[i] >> value[i];
cout << dfs(size, value, C, num) << endl;
cin>>num;
return 0;
}
693

被折叠的 条评论
为什么被折叠?



