尺取法

设以a(s)开始总和最初大于S时的连续子序列为a(s)+~~~a(t-1),这时a(s+1)+~~~+a(t-2)<a(s)+~~~a(t-2)<S

所以从a(s+1)开始总和最初超过S的连续子序列如果是a(s+1)+~~~a(t'-1)的话,必然有t<=t'

1,以s=t=sum=0初始化

2.只要依然有sum<s,就不断将sum增加a(t),并将t增加1

3.如果2中无法满足sum>=s则终止。否则的话,更新res=min(res,t-s)

4.将sum减去a(s),s增加1然后回到2

算法复杂度分析:因为t最多变化n次,所以只需要O(n)的复杂度就可以解决这个问题了

poj3061

猜你喜欢

转载自blog.csdn.net/zhouzi2018/article/details/80615017