POJ-3061

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ-3061相关的知识,希望对你有一定的参考价值。

算法:

1. 定义两个整数N和S,输入序列长度到N,输入最小子序列和下界到S。

2. 定义一个数组arr[100002],从arr[1]开始依次输入N个序列元素到arr。

3. 定义一个整数ans,初始化ans=100002。

4. 执行下列尺取法步骤:
    1. 定义两个整数l和r,初始化l=1,r=2。

    2. 定义一个整数sum,初始化sum=arr[1]。

    3. 当不满足条件:r==N+1并且sum<S时,执行下列步骤,否则结束:
        1. 若sum<S,则令r=r+1,sum=sum+arr[r-1]。回到1.3。

        2. 若sum>=S,则令l=l+1,sum=sum-arr[l-1]。回到1.3。

4. 若ans==100002,说明没有符合条件的最小子序列,置ans=0,否则ans就是最小子序列长度。

5. 输出ans。

 

代码:

#include <iostream>

using namespace std;

int arr[100002];

int main()
{
    int time;
    cin >> time;
    while (time--)
    {
        int N, S;
        cin >> N >> S;
        for (int i = 1; i <= N; ++i)
        {
            cin >> arr[i];
        }
        int ans = 100002;
        { // Algorithm: Ruler Method
            int l = 1, r = 2;
            int sum = arr[1];
            while (!(r == N + 1 && sum < S))
            {
                if (sum < S)
                {
                    ++r;
                    sum += arr[r - 1];
                }
                else
                {
                    ans = ans>r - l ? r - l : ans;
                    ++l;
                    sum -= arr[l - 1];
                }
            }
            if (ans == 100002)
            {
                cout << 0 << endl;
            }
            else
            {
                cout << ans << endl;
            }
        }
    }
    return 0;
}

 

以上是关于POJ-3061的主要内容,如果未能解决你的问题,请参考以下文章

poj3061 Subsequence

POJ 3061

尺取法POJ3061 & POJ3320

poj3061 Subsequence(尺取法)

Subsequence(POJ 3061)

Subsequence POJ - 3061