题目大意:题目给出每个浪开始的时间,可以获得的幸福点以及每个浪的花费时间,求得最大的幸福点值。
以前抗拒DP,但是人还是要进步的。
思路:dp[i]为第i秒所能获得的最大幸福点值。状态方程dp[i]=max(dp[i+1],dp[i+wait[i]]+fun[i]);
附上AC代码:
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int MAXN = 1e6+5;
ll fun_point[MAXN];
ll wait_time[MAXN];
ll dp[MAXN];
int main() {
int n;
ios::sync_with_stdio(false);
//read
cin >> n;
for (int i = 0; i < n; i++)
{
int a;
cin >> a;
cin >> fun_point[a] >> wait_time[a];
}
//dp solve
for (int i = 1000000; i > 0; i--) {
if (fun_point[i]) {
if (i + wait_time[i] > 1000000) {
dp[i] = max(dp[i + 1], fun_point[i]);
}
else {
dp[i] = max(dp[i + 1], dp[i + wait_time[i]] + fun_point[i]);
}
}
else {
dp[i] = dp[i + 1];
}
}
cout << dp[1] << endl;
// system("pause");
return 0;
}