首页 > 其他 > 详细

poj 3061 Subsequence(尺取法)

时间:2015-06-29 21:55:28      阅读:154      评论:0      收藏:0      [点我收藏+]

题目连接:

  http://poj.org/problem?id=3061

题目大意:

  一个有n个数的序列和一个整数s,找出一个最短序列,最短序列中各个数相加的和大于等于s。

解题思路:

  题目比较简单,写博记录一下思想——尺取法,用其他方法也可以解决。

 1 //#include <bits/stdc++.h>
 2 #include <cstdio>
 3 #include <iostream>
 4 #include <algorithm>
 5 using namespace std;
 6 const int maxn = 100010;
 7 int n, S, a[maxn];
 8 int solve ()
 9 {
10     int i, s, e, ans, sum;
11     ans = n + 1;
12     sum = s = i = 0;
13     while (true)
14     {
15         while (sum < S && i < n)
16             sum += a[i++];
17         if (sum < S)
18         {
19             if (ans > n)
20                 return 0;
21             return ans;
22         }
23         ans = min(ans, i-s);
24         sum -= a[s];
25         s ++;
26     }
27 }
28 int main ()
29 {
30     int t;
31     scanf ("%d", &t);
32     while (t --)
33     {
34         scanf ("%d %d", &n, &S);
35         for (int i=0; i<n; i++)
36             scanf ("%d", &a[i]);
37         int res = solve();
38         printf ("%d\n", res);
39     }
40     return 0;
41 }

 

poj 3061 Subsequence(尺取法)

原文:http://www.cnblogs.com/alihenaixiao/p/4608404.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!