题目链接:https://vjudge.net/problem/HDU-6709
题意:给出n条鱼的抓捕时间k和煮鱼时间a[i],你要在最短时间把所有鱼都煮了。(注意你只有一口锅)
思路:首先我们必须要花K时间抓一条鱼,然后考虑最佳状态是你在煮第一条鱼的时间就可以把其他鱼都抓了,那么就没有浪费时间。所以我们只要考虑在煮鱼的情况下能抓多少鱼num+=a[i]/k;如果num>=n-1没有时间浪费,否则少几条就要浪费一点时间,只要对a[i]%k从大到小排序,浪费的时间就是(k-a[i]%k)。
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int maxn=1e5+5; 4 #define ll long long 5 ll t,n,k,a; 6 ll ans; 7 ll b[maxn]; 8 ll cmp(ll a,ll b) 9 { 10 return a>b; 11 } 12 int main() 13 { 14 scanf("%lld",&t); 15 while(t--) 16 { 17 ll num=0; 18 ans=0; 19 scanf("%lld%lld",&n,&k); 20 for(int i=1;i<=n;i++) 21 { 22 scanf("%lld",&a); 23 num+=a/k; 24 b[i]=a%k; 25 ans+=a; 26 } 27 if(num>=n-1) 28 { 29 printf("%lld ",ans+k); 30 } 31 else 32 { 33 sort(b+1,b+n+1,cmp); 34 for(int i=1;i<=n-1-num;i++) ans+=(k-b[i]); 35 printf("%lld ",ans+k); 36 } 37 } 38 return 0; 39 }