题目大意:
第一行给定小懒虫玩游戏的时间段个数
开始时间和结束时间
。
接下来的
行,告诉你时间
到时间
可以获得熟练度
.
让你求可以得到最大的熟练度。
但是题目有一个重要信息:小懒虫可以调整时间,也就是可以调整
但是
和
的差不变。
所以你并不用知道
所对应的时间点, 只用看
到
,
到
进行的时间就行了。
思路
则题目就变成了:已知总共有
的时间,用去
的时间可获得
点熟练度。
想必很多人就猜到了,这就是01背包的模板(不会01背包的点这里)。
则这道题就
了
代码(可能有点丑)
//时间复杂度O(n^2), 空间复杂度O(n)
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int MAXX = 1e3 + 5;
int n, s, t, a[MAXX], b[MAXX], c[MAXX], dp[MAXX];
signed main(){
cin >> n >> s >> t;
for(int i = 1; i <= n; i++){
cin >> a[i] >> b[i] >> c[i];
}
for(int i = 1; i <= n; i++){
for(int j = t - s; j >= b[i] - a[i]; j--){
dp[j] = max(dp[j], dp[j - b[i] + a[i]] + c[i]);
}
}
cout << dp[t - s];
return 0;
}