摘要: 这题就是考察了一个单调队列,做的时候要注意由于首尾相连,所以我们就扩出一倍的空间来简化这个过程。定义f[j]表示在第j号位置结束的连续长度不超过k的最大和,那么f[j] = MAX( sum[j] - sum[k] ),其中就要求满足区间要求,由于每个点都是从前面的sum[k]得来的,所以就可以用一个单调队列来进行同步更新。详见代码:#include <cstdlib>#include <cstring>#include <cstdio>#define INF 0x3fffffff#define MAXN 100005using namespace std; 阅读全文
posted @ 2012-08-18 23:40 沐阳 阅读(633) 评论(0) 推荐(0)
摘要: 这题是给定了一个长度为N的串,问一个固定区域内的最小值和最大值,这题没办法通过DP来求解,因为单纯保留最值的信息是行不通。详见代码:#include <cstdlib>#include <cstdio>#include <cstring>#include <algorithm>#define MAXN 1000005using namespace std;int N, M, seq[MAXN], que[MAXN], front, tail;/* 此题就是要求出给定序列的某一段区间内的最小值和最大值 一个长为N的序列,每次选取M长的区间进行滑动 阅读全文
posted @ 2012-08-18 13:20 沐阳 阅读(225) 评论(0) 推荐(0)
摘要: 这题如果采用普通的DP方程的话果断TLE。所以需要对DP方程进行优化。由于这里龙珠可以随意选取,所以龙珠的编号也就没有了什么意义了,所以直接先对龙珠进行排序,我们只要保证其位置和花费同步排序就可以了。接下来就是优化了,这个部分可以见代码,在上一题中使用的同步滑动指针,这里则不然,需要根据数值来异步滑动指针。代码如下:#include <cstdlib>#include <cstring>#include <cstdio>#include <algorithm>#define INF 0x7f7f7f7fusing namespace std;in 阅读全文
posted @ 2012-08-18 02:06 沐阳 阅读(260) 评论(0) 推荐(0)