题目:
Alice看到了有很多菜没最后都没有吃完。
本着不浪费的精神,她决定将这些菜打包好分发给各位亲戚带走。
每分钟,Alice可以选择一份菜,填满一个打包盒(如果填不满也不会用其他的菜去补充)。
距离散会还有一段时间,他们希望你计算一下所需打包盒的最小容积
这样既能准时完成所有菜品的打包,也能分成更多份给不同的人。
输入:
第一行是样例个数K(1<=K<=1000)。
每组样例的第一行是剩菜的个数N(1<=N<=1000),可用时间T(1<=T<=1000),保证N<=T。
第二行N个整数,表示每盘菜的剩余量Ai(1<=Ai<=10000)。
3
4 8
3 6 7 11
5 6
30 11 23 4 20
5 9
10 11 12 13 14
输出:
每组样例输出一个数字,即打包盒的最小容量。
4
23
10
#include <stdio.h> #include <iostream> #include <math.h> #include <string.h> using namespace std; const double PI=acos(-1.0); int n,t; int s[105]; bool check(int x){ int cot=0; for(int i=0;i<n;i++){ cot+=s[i]/x; if(s[i]%x!=0){ cot++; } if(t-cot<n-i-1){ return false; } } if(cot<=t) return true; else return false; } int main(){ int k; int l=0,r=0,mid; cin>>k; for(int i=0;i<k;i++){ cin>>n>>t; memset(s,n,sizeof(s)); for(int j=0;j<n;j++){ cin>>s[j]; r=max(r,s[j]); } while(l<=r){ mid=(l+r)/2; if(check(mid)){ r=mid-1; } else l=mid+1; } cout<<l<<endl; } }