題目鏈接:https://ac.nowcoder.com/acm/contest/886/D
思路:數據很水,根據題意暴力數組模擬就了。也可以優化用STL的multiset模擬會更快。
AC代碼:
#include<bits/stdc++.h>
using namespace std;
int v[1010];
int vis[1010];
int n,k;
bool cmp(int x,int y)
{
return x>y;
}
bool solve(int vv)
{
for(int i=0;i<n;i++){
vis[i]=0;
}
int cnt=0;
for(int i=0;i<n;i++){
int sum=vv;
if(vis[i]==0){
cnt++;
for(int j=i;j<n;j++){
if(vis[j]==0&&v[j]<=sum){
sum-=v[j];
vis[j]=1;
}
}
}
}
return (cnt==k?true:false);
}
int main()
{
int t;
cin>>t;
int Case=0;
while(t--){
cin>>n>>k;
int sum=0;
for(int i=0;i<n;i++){
cin>>v[i];
sum+=v[i];
}
sort(v,v+n,cmp);
int v=ceil(1.0*sum/(1.0*k));
while(!solve(v)){
v++;
}
printf("Case #%d: %d\n",++Case,v);
}
return 0;
}