제출 #843882

#제출 시각아이디문제언어결과실행 시간메모리
843882AblablaKnapsack (NOI18_knapsack)C++11
0 / 100
161 ms348 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 == (int)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 < (int)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"; }
#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...