思路讲解
是比较简单的树上dp问题,记录一下。
1 | void dfs(ll node,ll x0,ll x1,ll cnt){ |
AC代码
https://codeforces.com/contest/2114/submission/323228554
1 | // Problem: E. Kirei Attacks the Estate |
是比较简单的树上dp问题,记录一下。
1 | void dfs(ll node,ll x0,ll x1,ll cnt){ |
https://codeforces.com/contest/2114/submission/323228554
1 | // Problem: E. Kirei Attacks the Estate |
感觉每次选择都可能有后效性怎么办?
1 | // 碰到b,a c,a operate 在最近的位置 |
仔细一想那,这道题目也没有那么复杂其实,其实只有b,c是需要考虑是否操作的。
只考虑那么一种情况的话,其实就看后面有没有c,a,而且b的前面c的数量啦。
https://www.cnblogs.com/fwdzh/p/18909502
这个题解告诉我们,我们是不可能在线处理的,这个难度是比较大的,但是我前面一直在想这个(QAQ)。
https://codeforces.com/contest/2111/submission/322930903
1 | // Problem: E. Changing the String |
那么我们发现,匹配应该是这样匹配,而不是用最大的匹配最小的。
1 | if(*g[idx2].begin()<*g[idx3].rbegin()){ |
这道D题确实不算太难,我赛时应该也是可以写出来的。
采用类似于下图的构造方式即可

https://codeforces.com/contest/2111/submission/322856069
1 | // Problem: D. Creating a Schedule D. 创建时间表 |
https://www.luogu.com.cn/article/rae0b6wl
总体思路就是将等于目标转变为构造最小的 大于等于目标的构造
1 | ROF(i,Q,1){ |
既然是要被覆盖的,我们还要构造最小的吗,所以我们令
https://codeforces.com/contest/2115/submission/323143930
1 | // Problem: B. Gellyfish and Camellia JaponicaB. 水母和山茶花 |
https://codeforces.com/contest/2115/submission/322643402
比最大条件小的点是不被允许的,那么填什么最好呢?
https://codeforces.com/contest/2115/submission/322665243
1 | 1 |
附随机数据生成器
1 | #include <bits/stdc++.h> |
https://www.cnblogs.com/cjcf/p/18906536
给出最后的结果和操作步骤,求初始数组
通过贪心,我们发现在A[x]有多条边的时候,只能选择满足最大的边(条件,边权为A[z]大小)
比最大条件小的点是不被允许的,那么我们就要看是就选这个最大条件还是选自己的值(如果自己的值比最大条件大)。
贪心的来说,如果自己的值是要被覆盖的,那么肯定选条件值,如果不被覆盖,那肯定就选自己的值。
当然,上面的这些只针对于不是多重覆盖的情况,如果出现多重覆盖情况,那么只保留最后覆盖情况(前面覆盖了也是白覆盖)。
那么我们发现,我们小瞧了这道题目,就是说操作之间是有可能互相影响的。
1 | 1 |
当然,我们发现我们的贪心结论是没有什么大的问题的,只是适用范围错了,其仅在倒推时,不涉及传递的时候有用。
https://www.luogu.com.cn/article/63o898db
如果说一个序列是1,2,3,4,5,……,N,还有一个序列无序,那么其实就选一个LIS就行。
那么现在前面这个序列不是有序的,但前面这个序列的标号是有序的,这个时候怎么搞?其实我们就定义新的顺序为A[1]<A[2]<A[3]……<A[N],就行了
1 | scanf("%lld",&N); |
https://www.luogu.com.cn/record/219257679
1 | // Problem: P1439 【模板】最长公共子序列 |