Submission

Status:

[-SSSSSSSSSSSSSSSSSSS]

Subtask/Task Score:

{0/100}

Score: 0

User: goine

Problemset: ฮีโร่และมอนสเตอร์

Language: cpp

Time: 0.002 second

Submitted On: 2026-03-11 10:09:42

// 0/1 knapsack

#include<iostream>
#include<vector>
using namespace std;

int main() {
    int hero_count, monster_count;
    cin >> hero_count >> monster_count;

    vector<int> heros(hero_count);
    int maximum = 0;

    for (int i = 0; i < hero_count; i++) {
        cin >> heros[i];
        if (heros[i] > maximum) {
            maximum = heros[i];
        }
    }

    // monsters
    vector<pair<int, int>> monsters(monster_count, pair<int, int>());
    for (int i = 0; i < monster_count; i++) {
        cin >> monsters[i].first >> monsters[i].second;
    }
    
    vector<vector<int>> dp(maximum + 1, vector<int>(monster_count, 0));
    for (int i = 0; i < monster_count; i++) {
        for (int j = 1; j <= maximum; j++) {
            if (j >= monsters[i].first) {
                dp[j][i] = dp[j][i] + monsters[i].second;
            }

            if (i > 0) {
                dp[j][i] = dp[j][i] + dp[j][i - 1];
            }
        }
    }


    for (int i = 0; i < hero_count; i++) {
        cout << dp[heros[i]][monster_count - 1] << ' ';
    }

    return 0;
}