摘要: 1 /* 2 题意:给你n的序列求最长子序列,该序列里|a[i]-a[i-1]|<=d 3 4 分析:O(n^2)的DP很容易想到,那么显然优化也很容易想到 5 用线段树维护区间最大值, 6 设dp[i]表示以数值为i结尾的最长符合要求序列, 7 对于a[i],询问值为[a[i]-d,a[i]+d]的最大值,然后在单点更新; 8 注意要先离散; 9 10 11 12 */13 14 #include<cstdio>15 #include<cstring>16 #include<cstdlib>17 #include<iostream>18 阅读全文
posted @ 2013-05-22 22:10 Rabbit_hair 阅读(311) 评论(0) 推荐(0)
摘要: 1 /* 2 题意:n天,第i天可以获得的值为vi,如果获得第i天的值,那么下一次能获得的值 3 只能在[i+x[i],i+y[i]-1]天中取,为最大能获得多少值; 4 5 分析:直接DP,每次维护经过前i-1天第i天能可以获得的最大值,用线段树维护就要同时记录下区间的最大最小值; 6 表示区间内的可能获得最大值的最大值和最小值; 7 另一种DP的思路,dp[i]表示选了第i天,最终能获得的最大值,那么dp[i]=v[i]+max(dp[i+x[i]],dp[i+y[i]-1]); 8 直接用线段树维护区间最大值就可以了; 9 10 */11 #include<cstdio>12 阅读全文
posted @ 2013-05-22 16:02 Rabbit_hair 阅读(177) 评论(0) 推荐(0)