思路:01背包问题。
接下来我们用C++进行编程:
#include <iostream> #include<string> #include<vector> #include <sstream> #include<algorithm> using namespace std; int main() { int n; cin >> n; vector<int> score(n + 1); for(int i = 1; i <= n; i++) { cin >> score[i]; } vector<int> time(n + 1); for(int i = 1; i <= n; i++) { cin >> time[i]; } int times; cin >> times; vector<vector<int> > dp(n + 1, vector<int>(times + 1,0)); for(int i = 1; i <= n; ++i) { for(int j = time[i]; j <= times; j++) { dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - time[i]] + score[i]); } } cout << dp[n][times] << endl; return 0; }