[CCPC2019 ONLINE]H Fishing Master

题意

http://acm.hdu.edu.cn/showproblem.php?pid=6709


 

思考

先考虑所有鱼的烹饪时间小于k的情况。将T从大到小排序后,煮一条鱼相当于将其时间补齐至k。

由于鱼的烹饪时间会大于等于k,那么,最优解一定不会出现鱼不够煮的情况。在煮鱼期间,可以钓到$\frac{t_i}{k}$条鱼,最后要补齐的鱼的数量有n-cnt-1条。-1是因为最开始没有鱼。


 

代码

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long int ll;
 4 const int maxn=1E5+5;
 5 int T;
 6 ll n,k;
 7 ll t[maxn];
 8 bool cmp(ll x,ll y)
 9 {
10     return x>y;
11 }
12 void solve()
13 {
14     cin>>n>>k;
15     ll cnt=0,ans=0;
16     for(int i=1;i<=n;++i)
17     {
18         cin>>t[i];
19         ans+=t[i];
20         cnt+=t[i]/k;
21         t[i]%=k;
22     }
23     cnt=min(cnt,n);
24     sort(t+1,t+n+1,cmp);
25     for(int i=1;i<=n-cnt-1;++i)
26         ans+=k-t[i];
27     cout<<ans+k<<endl;
28 }
29 int main()
30 {
31     ios::sync_with_stdio(false);
32     cin>>T;
33     while(T--)
34         solve();
35     return 0;
36 }
View Code

 

转载于:https://www.cnblogs.com/GreenDuck/p/11410503.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值