发布于 2020年3月12日 2020年3月12日 由willingox
给n个数,问是否存在3个以上的回文序列。
最少3个,那么就是只需要2个相同的,需要注意的是 这两个相同的数不能相邻,不然中间找不到第三个数。
bool f=0;
给一段字符串,在L时可以往左走1-d步,在R时可以往右走1-d步,问能走完的最小的d
如果存在一段连续的L,那么如果d小于这段连续的L,那么不管怎么走,都会落在这一段L上,那么必定走不到这一段的后面,所以答案就是连续L的最大值+1。
求ia_j+b_j\)的对数。
sort(c+1c+n+1);
int l=i+1r=n;
给n个时间和每天的时间长度h,然后给了一个l和r,如果醒来的时间落在LR中,那么满意度加1,问满意度最大值,n个时间a[i]为每次睡眠的时间,可以睡满a[i]或者睡a[i]-1小时。
dp,dp[i][j]代表第i次睡眠后,落在j时间的最高满意度,然后根据a[i]和a[i]-1转移即可。
for(int i=l;i<=r;i++){
给n个点的树,每个点涂上了白色和黑色,1为白,0为黑,然后给出n-1条边,问每个点的子树(包含这个点的树均可)的白色-黑色的最大值。
换根dp,先就把1当做根, 跑一个dp,求出每个点的白色-黑色的最大值(这个应该是很简单的)。然后就是换根dp(就是把当前的点作为根,把当前点的父节点作为子节点),换根时注意past已经不是父节点了,所以要将past在第一次dp时求出来的答案减去now这边的贡献(那么得到的就是以now为根时,past的子树的贡献),等算完now之后再加回去。