Subsequence(POJ No.3061)(尺取法)
来源:互联网 发布:java excel 图表插件 编辑:程序博客网 时间:2024/06/06 05:11
给定长度为n的数列整数a[0],a[1],...a[n-1]以及整数S。求出总和不小于S的连续子序列的长度的最小值。如果解不存在,则输出0。
限制条件
10<n<10^5
0<a[i]<=10^4
S<10^8
思路:(1)以s,t,sum分别代表连续子序列开始位置,结束位置,累加和;
(2)只要依然有sum<S,就不断将sum增加a[t],并将t增加1;
(3)如果无法满足sum>=S则终止。否则的话,更新res=min(res,t-s);
(4)将sum减去a[s](连续子序列头部),同时s增加1,继续(2);
时间复杂度:因为t最多变化n次,因此时间复杂度为O(n);
实质:反复地推进区间的开头与结尾,求取满足条件的最小区间,此方法称为尺取法(因为这种操作很像是尺取虫爬行的方式);
代码:
void solve(){ int res=n+1; int s=0,t=0,sum=0; for(;;){ while(t<n&&sum<S) sum+=a[t++]; if(sum<S) break; res=min(res,t-s); sum-=a[s++]; } if(res>n) //解不存在 res=0; printf("%d\n",res);}
阅读全文
1 0
- Subsequence(POJ No.3061)(尺取法)
- 146_尺取法 subsequence (POJ No 3061)
- POJ 3061 Subsequence (尺取法)
- [ACM] POJ 3061 Subsequence (尺取法)
- poj 3061 Subsequence(尺取法)
- POJ 3061 Subsequence(二分/尺取法)
- POJ-3061Subsequence(尺取法)
- POJ 3061 Subsequence(尺取法)
- POJ 3061 Subsequence(尺取法)
- POJ 3061 Subsequence(尺取法)
- POJ:3061 Subsequence(尺取法)
- POJ 3061 Subsequence(尺取法)
- POJ 3061 Subsequence (尺取法)
- POJ 3061 Subsequence(尺取法)
- poj 3061--Subsequence(尺取法)
- poj 3061 Subsequence(尺取法)
- POJ 3061 Subsequence ( 尺取法 )
- POJ 3061 Subsequence(尺取法)
- 库克:我不担心人工智能像人一样思考【智库2861】
- qq登录
- Android开发listview最后一行显示下划线
- idea 2017 注册
- Translating SQLException with SQL state '42000', error code '1064', message [You have an error in yo
- Subsequence(POJ No.3061)(尺取法)
- 有效有效的解决jquery版本冲突
- 用于文本分类的RNN-Attention网络
- jQuery对象和DOM对象的区别和联系
- Android入门计算器编写
- java复制数组
- Python3.6安装Scrapy爬虫框架
- hdu5491-位操作模拟
- 文章标题