Submission #843881

#TimeUsernameProblemLanguageResultExecution timeMemory
843881AblablaKnapsack (NOI18_knapsack)C++11
0 / 100
219 ms600 KiB
#include <bits/stdc++.h>

using namespace std;

typedef pair<int, int> pii;

int s, n;
map<int, vector<pii>> sorban;
vector<vector<int>> dp;
vector<int> indexek;

int megold(int ind, int maradt){
    if(maradt < 0){
        return 0;
    }
    if(ind == sorban.size()){
        return 0;
    }
    if(dp[ind][maradt] != -1){
        return dp[ind][maradt];
    }

    int vissza = 0;
    int plusz = 0;
    int minusz = 0;

    for(int i = 0; i < sorban[indexek[ind]].size(); i++){
        for(int j = 0; j < sorban[indexek[ind]][i].second; j++){
            minusz += indexek[ind] + 1;
            plusz += sorban[indexek[ind]][i].first;
            int a = (maradt - minusz >= 0 ? megold(ind + 1, maradt - minusz) + plusz : 0);

            //cout << ind << " " << maradt << " : " << a << " : " << plusz << " " << minusz << "\n";

            vissza = max(vissza, a);
        }
    }

    return dp[ind][maradt] = vissza;
}

int main(){
    cin >> s >> n;


    for(int i = 0; i < n; i++){
        int ertek, suly, db;
        cin >> ertek >> suly >> db;

        if(sorban[suly - 1].size() == 0){
            indexek.push_back(suly - 1);
        }
        sorban[suly - 1].push_back({ertek, db});
    }

    sort(indexek.begin(), indexek.end());
    dp.assign(sorban.size(), vector<int>(s + 1, -1));

    for(auto &x : sorban){
        sort(x.second.begin(), x.second.end(), greater<pii>());
    }

    cout << megold(0, s) << "\n";
}

Compilation message (stderr)

knapsack.cpp: In function 'int megold(int, int)':
knapsack.cpp:16:12: warning: comparison of integer expressions of different signedness: 'int' and 'std::map<int, std::vector<std::pair<int, int> > >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   16 |     if(ind == sorban.size()){
      |        ~~~~^~~~~~~~~~~~~~~~
knapsack.cpp:27:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   27 |     for(int i = 0; i < sorban[indexek[ind]].size(); i++){
      |                    ~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...