>傳送門<php
題意:如今須要捕$n$條魚而且將它們煮熟來吃。每條魚要煮相應的時間才能吃(能夠多煮一會),鍋裏每次只能煮一條魚,捕一條魚的時間是相同的,可是在捕魚的時間內不能作其餘事(好比換一條魚煮),求把全部的魚都煮熟最少須要多少時間。
思路:這裏提供一種比較好理解的想法,來自$yx$學長html
你想一下,咱們要吃魚的話魚確定是要煮熟的,因此煮魚的時間必需要花出去,咱們這裏能夠先把煮魚的時間統計到一塊兒。題目是要求咱們儘量的節省時間,因此咱們除了第一條魚之外,其餘的魚能夠在煮的時候釣,這樣能最大利用時間。ios
對於第$i$條魚,燉它的時候咱們能夠不浪費時間抓到$t_{i}/k$條魚,或者浪費$k-t_{i}\%k$的時間抓到$t_{i}/k+1$條魚.因此若是$\sum_{i=1}^{n}t_{i}/k\geq n-1$,則能夠不浪費時間完成任務;若是$\sum_{i=1}^{n}t_{i}/k<n-1$,則差$m$條魚就選燉$t_{i}\%k$前$m$大的魚的時候浪費時間多抓一條魚。ide
Codespa
#include<iostream> #include<cstdio> #include<algorithm> #define ll long long using namespace std; int t, n, k, x; int a[100005]; int main() { scanf("%d", &t); while (t--) { scanf("%d%d", &n, &k); ll cnt = 0, ans = k; //釣第一條魚的時間 for (int i = 1; i <= n; i++) { scanf("%d", &x); ans += x; cnt += x / k; //每條魚煮的時候可以釣多少條魚 a[i] = x%k; } sort(a + 1, a + n + 1); for (int i = n; i >= cnt + 2; i--) //剩下的魚還須要多煮幾分鐘才能釣上來 ans = ans + k - a[i]; printf("%lld\n", ans); } }
原文出處:https://www.cnblogs.com/wizarderror/p/11405882.htmlcode