Estrella’s Chocolate | ||
[ Submit Code ] [ Top 20 Runs ] | ||
Acceteped : 26 | Submit : 77 | |
Time Limit : 1000 MS | Memory Limit : 65536 KB | |
Description | ||
Estrella’s Chocolate题目描述Estrella是个漂亮的小姑娘,她最喜欢吃的零食就是巧克力,但是巧克力吃多了会发胖,美貌和美食之间她必须做出艰难地选择。 输入第一行是一个整数
T(1≤T≤100)
,表示样例的个数。 输出每行输出一个样例的结果。 样例输入2 5 2 5 3 2 4 1 5 3 5 3 2 4 1 样例输出8 5 | ||
Sample Input | ||
Sample Output | ||
Source | ||
[ Submit Code ] [ Top 20 Runs ] |
思路:二分答案。尽量多的加入到当前天中,最后看天数是否满足相应条件,适当地减小区间范围以便得到最优解,二分结束后,下限最后值即为答案。注意:二分终止条件处含等号(我不含,WA了一发)。
AC代码如下:
#include <bits/stdc++.h>
using namespace std;
const int maxn = 10005;
int con[maxn];
int n, m;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
int T;
scanf("%d", &T);
while (T--){
scanf("%d%d", &n, &m);
int low=0, high=0;
for (int i=0; i<n; ++i){
scanf("%d", con+i);
high += con[i];
low = max(low, con[i]);
}
int cnt, sum, mid;
while (low <= high){
mid = (low+high)>>1;
sum = 0;
cnt = 1;
for (int i=0; i<n; ++i){
if (sum+con[i] <= mid)
sum += con[i];
else
++cnt, sum=con[i];
}
if (cnt > m)
low = mid+1;
else
high = mid-1;
}
printf("%d\n", low);
}
return 0;
}