标签:
这题的意思是给你 n 道菜,第 i 道菜需要 Ai 步才能完成
每次你能对 m 道菜分别完成一步,请问最少需要几次?
这题暴力写肯定是不行的,去年省赛的时候就是没写出来这题,今天再把思路理一理吧。
首先我们需要明确的是
1. n <= m 的时候, 那么答案显而易见,就是 Max (A[i])
2. n > m
①此时我们不难发现这个现象,如果 sum (A[i]) 能被 m 整除,那么我们可能恰恰只需要 (sum / m) 次即可完成
一个例子: n = 3, m = 2
a[1] = 1, a[2] = 2, a[3] = 3
②如果,sum (A[i]) 不能被 m 整除,那么只需要在 ① 的基础上加1即可
当然,这里不能忘了,在答案输出的时候,要保证答案 >= Max(A[i]), 否则会出现对一个 A[i] 多次减法操作
贴上 Source Code:
1 #include <cstdio> 2 #include <iostream> 3 #include <string> 4 #include <cstring> 5 #include <stack> 6 #include <queue> 7 #include <vector> 8 #include <cstdlib> 9 #include <algorithm> 10 11 using namespace std; 12 13 int a[60000]; 14 int n, m; 15 16 int main (){ 17 int i, j, k, u, v, t; 18 19 cin >> t; 20 while (t--) { 21 cin >> n >> m; 22 int sum = 0; 23 int MAX = 0; 24 for (i = 0; i < n; ++i){ 25 cin >> a[i]; 26 sum += a[i]; 27 MAX = max (MAX, a[i]); 28 } 29 30 if (n <= m) { 31 cout << MAX << endl; 32 continue; 33 } 34 35 int cur = sum / m; 36 if (sum % m != 0) ++cur; 37 38 cur = max(cur, MAX); 39 40 cout << cur << endl; 41 } 42 43 return 0; 44 }
ZOJ 3778 Talented Chef 模拟 [ 祝愿明天省赛一帆风顺, ZJSU_Bloom WILL WIN : )
标签:
原文地址:http://www.cnblogs.com/wushuaiyi/p/4454474.html