这周找回节奏
早睡早起,晨跑,记录每日成果。注意劳逸结合
冲冲冲,加油
10.26 周一
P1280 尼克的任务
这道题想了3天,没有突破
然后就看了题解了。至少思考过两三天还是没有思路才可以看题解,严格遵守
看了题解焕然大悟
我思考的时候一直卡在一个点,就是当前这个任务的选择会影响后来的选择
也即是有后效性。动态规划要求无后效性,也就是当前的选择只与之前有关,不能影响未来的选择
我就一直卡在这,不知道怎么办
看了题解,逆向思维,倒着搜,就可以避免后效性
太秀了我天
这道题最大的收获就是逆向思维,有些题目反着想就可以突破
卡住时提醒自己反着想,逆向思维
还有一点是不一定是前i个任务,可以是前i段时间
然后看别人题解看关键卡住自己的点就行了,剩下的细节什么的自己写,不要全部照抄
#include<bits/stdc++.h>
#define REP(i, a, b) for(int i = (a); i < (b); i++)
#define _for(i, a, b) for(int i = (a); i <= (b); i++)
using namespace std;const int MAXN = 1e4 + 10;
vector<int> a[MAXN];
int f[MAXN], n, k;int main()
{scanf("%d%d", &n, &k);_for(i, 1, k) {int l, t;scanf("%d%d", &l, &t);a[l].push_back(t);}for(int i = n; i >= 1; i--){if(!a[i].size()) f[i] = f[i+1] + 1;else REP(j, 0, a[i].size()) f[i] = max(f[i], f[i+a[i][j]]);}printf("%d\n", f[1]);return 0;
}