-
Subsequence
- POJ - 3061
- 主要思想为:当a1, a2 , a3 满足和>=S,得到一个区间长度3,那么去掉开头a1, 剩下 a2,a3,判断是否满足>=S,如果满足,那么区间长度更新,如果不满足,那么尾部向后拓展,判断a2,a3,a4是否满足条件。重复这样的操作。
- 个人对尺取法的理解:当一个区间满足条件时,那么去掉区间开头第一个数,得到新区间,判断新区间是否满足条件,如果不满足条件,那么区间末尾向后扩展,直到满足条件为之,这样就得到了许多满足条件的区间,再根据题意要求什么,就可以在这些区间中进行选择,比如区间最长,区间最短什么的。这样跑一遍下来,时间复杂度为O(n)。
-
#include<iostream> using namespace std; #define maxn 100005 int n,t,a[maxn],r,ans; int sum[maxn],k; int main() { cin>>t; while(cin>>n>>k) { sum[0]=0; ans=n+10; r=1; for(int i=1; i<=n; i++) { cin>>a[i]; sum[i]=a[i]+sum[i-1]; } for(int i=0; i<n; i++) { while(r<=n&&sum[r]-sum[i]<k) r++; if(r==n+1) break; if(r-i<ans) ans=r-i; } if(ans==n+10) cout<<0<<endl; else cout<<ans<<endl; } return 0; }
Subsequence -尺取法
猜你喜欢
转载自blog.csdn.net/BePosit/article/details/82154678
今日推荐
周排行