http://codeforces.com/problemset/problem/279/B
题意 :Valera 有很多的空闲时间,所以他决定看书,给出n本书,编号1到n,和看每本书需要的时间,他看书是随机的,然后是连续的,从第 i 本开始看,看完了会看第i+1本,然后是第i+2本,问他在时间 t 内最多能看多少本书。
思路 :一开始没看明白题意,以为把时间排序,从小开始往里加,后来才发现人家要求的是连续的。这个就是循环从头开始加,如果时间超了,就从第一本开始往外删。
#include <iostream> #include <stdio.h> #include <string.h> using namespace std ; int book[101000] ; int main() { int n,t ; while(scanf("%d %d",&n,&t)!=EOF) { for(int i = 0 ; i < n ; i++) scanf("%d",&book[i]) ; int sum = 0 , cnt = 0 ,time = 0,count = 0; for(int i = 0 ; i < n ; i++) { if(time+book[i] > t) { time -= book[cnt] ; cnt++ ; i-- ; sum--; } else { time += book[i] ; sum++ ; count = max(sum,count) ; } } cout<<count<<endl ; } return 0 ; }