题解:P13212 [GCJ 2015 Qualification] Infinite House of Pancakes

· · 题解

AC代码:


#include <iostream>
#include <vector>
#include <algorithm>
#include <climits>

using namespace std;

int solve(vector<int>& plates) {
    int max_p = *max_element(plates.begin(), plates.end());
    if (max_p <= 1) {
        return max_p;
    }
    int res = max_p;
    for (int k = 2; k <= max_p; ++k) {
        int total_moves = 0;
        for (int p : plates) {
            total_moves += (p - 1) / k;
        }
        res = min(res, total_moves + k);
    }
    return res;
}

int main() {
    int T;
    cin >> T;
    for (int t = 1; t <= T; ++t) {
        int D;
        cin >> D;
        vector<int> plates(D);
        for (int i = 0; i < D; ++i) {
            cin >> plates[i];
        }
        int ans = solve(plates);
        cout << "Case #" << t << ": " << ans << endl;
    }
    return 0;
}