题目链接:P7798 [COCI2015-2016#6] PUTOVANJE - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
题目描述
Mislav 最喜欢在森林里度过时光,因为森林里有各种各样的水果,吃了每种水果都能获得一定的饱食度。但他不会使自己的总饱食度超过 C。
现在森林里有一条小径,小径旁顺次种了 N 个水果,每个水果都有一个饱食度 wi。Mislav 可以选择从任意一个水果的位置开始,往第 N 个水果前进。在前进的过程中,如果吃下当前位置的水果,总饱食度不会超过 C,他就一定会吃下该水果。否则,他就会跳过该水果,继续前进。
请问 Mislav 能吃掉的水果个数最多是多少?
输入格式
第一行包含两个整数 N 和 C。
第二行包含 N 个整数 wi,为第 i 个水果的饱食度。
输出格式
输出一个整数,为 Mislav 能吃掉的最多水果个数。
样例 #1
样例输入 #1
5 5
3 1 2 1 1
样例输出 #1
4
样例 #2
样例输入 #2
7 5
1 5 4 3 2 1 1
样例输出 #2
3
样例 #3
样例输入 #3
5 10
3 2 5 4 3
样例输出 #3
3
提示
【样例 1 解释】
如果 Mislav 决定从第 1 个水果开始吃,那么他可以吃到第 1、2、4 个水果,一共吃了 3 个。如果他从第 2 种水果开始吃,那么他可以吃到第 2、3、4、5 共 4 个水果。
【数据范围】
对于 100% 的数据,1<= N <=1000,1<= C <=10^6,1<= wi <=1000。
【题目来源】
题目译自 COCI 2015-2016 CONTEST #6 T2 PUTOVANJE。
本题分值按 COCI 原题设置,满分 80。
AC code:
#include<iostream>
#include<algorithm>
using namespace std;
int a[1010];
int main()
{
int n,c;
cin>>n>>c;
int res=0;
for(int i=0;i<n;i++)
cin>>a[i];
for(int i=0;i<n;i++)
{
int cnt=0;
int sum=0;
for(int j=i;j<n;j++)
{
if(sum+a[j]<=c)
sum+=a[j],cnt++;
}
res=max(res,cnt);
}
cout<<res;
return 0;
}