您的位置:首页 > 产品设计 > UI/UE

UVa 1121 - Subsequence

2015-11-25 08:20 477 查看
題目:給你一串數,求連續和不小於S的最小長度。

分析:貪心,DP。每次求得當前結束位置時的最小長度,然後記錄最短的即可。

這裡使用平均勢能分析法,可知時間複雜度為O(N)。

說明:看到有用二分區間長度,然互計算的O(NlgN)。

#include <cstdio>

int data[100001];

int main()
{
	int n, s;
	while (~scanf("%d%d",&n,&s)) {
		for (int i = 0 ; i < n; ++ i)
			scanf("%d",&data[i]);
		int sum = 0, l = 0, r = 0, min = n+1;
		while (r < n) {
			sum += data[r ++];
			while (sum >= s) {
				if (min > r-l)
					min = r-l;
				sum -= data[l ++];
			}
		}
		if (min == n+1) min = 0;
		printf("%d\n",min);
	}
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: