题目链接:https://ac.nowcoder.com/acm/contest/886/D 思路:数据很水,根据题意暴力数组模拟就 o k ok ok了。也可以优化用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; }