题目
多重背包,不过要多考虑一个年限,最开始用map复杂度太高,改用数组顶着优化勉强过了。
本金为背包空间,投资额为消耗的空间,利息为价值
#pragma GCC optimize(3)
#pragma GCC optimize("Ofast", "inline")
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
typedef long long ll;
struct Bond{
int total;
int excess;
};
int S, N, D;
Bond bond[11];
int dp[30000000];
int main(void)
{
ios::sync_with_stdio(false);
cin.tie(0);
cin >> S >> N >> D;
for (int i = 1; i <= D; i++) {
cin >> bond[i].total >> bond[i].excess;
}
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= D; j++) {
for (int k = bond[j].total; k <= S; k++) {
dp[k] = max(dp[k], dp[k - bond[j].total] + bond[j].excess);
}
}
S += dp[S];
}
cout << S << endl;
return 0;
}```