《挑战程序设计》148页
题目链接poj3601
题目的关键在于 subsequence of consecutive elements 所以是连续子序列
所以我们可以使用尺取法
具体尺取法怎么用
参照样例
5 1 3 5 10 7 4 9 2 8
根据下图 走一遍就好了
答案是2
代码
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
using namespace std;
const int maxn=1e5+7;
const int INF=0x3f3f3f3f;
int T,n,k;
int a[maxn];
int main(){
scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&k);
memset(a,0,sizeof(a));
for(int i=0;i<n;i++)scanf("%d",&a[i]);
int m=INF,sum=0,i=0,j=0;
while(1){
while(j<n&&sum<k){//不够k就一直加
sum+=a[j];j++;
}
if(sum<k)break;//全部加完了 还不够就说明无解
m=min(m,j-i);//更新满足题意的长度
sum-=a[i];i++;//减去第一个 继续循环
}
if(m>n)m=0;
printf("%d\n",m);
}
return 0;
}