Posted on

Problem

Submissions

First Thought

  • Greedy Algorithm Won’t work
  • Should adopt Dynamic Programming
#include <iostream>
#include <vector>

using namespace std;

int solve()
{
    int N; cin >> N;
    int K; cin >> K;
    int P; cin >> P;

    vector<vector<int>> stacks(N);

    for(int Ni = 0; Ni < N; ++Ni){
        stacks[Ni].resize(K);
        for(int Ki = 0; Ki < K; ++Ki) {
            cin >> stacks[Ni][Ki];
        }
    }
    int total = 0;
    while(--P) {
        auto m_row = 0;
        for(int Ni = 0; Ni < N; ++Ni) {
            if(!stacks[Ni].empty() && stacks[m_row][0] < stacks[Ni][0]) m_row = Ni;
        }
        total += stacks[m_row][0];
        stacks[m_row].erase(stacks[m_row].begin());
    }
    return total;
}

int main() {
    int N; cin >> N;
    while(N--)
        cout << solve() << endl;
    return 0;
}

(To be continued…)

Leave a Reply

Your email address will not be published. Required fields are marked *