제출 #834551

#제출 시각아이디문제언어결과실행 시간메모리
834551VMaksimoski008Knapsack (NOI18_knapsack)C++14
100 / 100
80 ms36412 KiB
#include <bits/stdc++.h> #define pb push_back #define eb emplace_back #define sz(x) (int)x.size() #define all(x) x.begin(), x.end() #define uniq(x) x.erase(unique(all(x)), x.end()) #define rall(x) x.rbegin(), x.rend() //#define int long long using namespace std; using ll = long long; using ull = unsigned long long; using ld = long double; using pii = pair<int, int>; using pll = pair<ll, ll>; const int mod = 1e9 + 7; const int LOG = 20; const int maxn = 1e5 + 5; const double eps = 1e-9; void setIO() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); } struct Item { int v, w, k; }; int32_t main() { setIO(); int s, n; cin >> s >> n; vector<Item> v(n); map<int, vector<pii> > mp; for(Item &it : v) { cin >> it.v >> it.w >> it.k; mp[it.w].push_back({ it.v, it.k }); } // for(auto &x : mp) { // cout << x.first << '\n'; // for(auto &el : x.second) { // cout << "{ " << el.first << ", " << el.second << " } \n"; // } // } vector<vector<ll> > dp(mp.size()+1, vector<ll>(s+1, -1)); dp[0][0] = 0; int id = 1; for(auto &currVec : mp) { int currW = currVec.first; vector<pii> items = currVec.second; sort(all(items)); reverse(all(items)); for(int j=0; j<=s; j++) { dp[id][j] = dp[id-1][j]; int currProd = 0; int totalProducts = 0; ll gain = 0; int currBuy = 0; while(currProd < sz(items) && (currBuy + 1) * currW <= j) { gain += items[currProd].first; totalProducts++; currBuy++; if(j >= currBuy * currW && dp[id-1][j-currBuy*currW] != -1) { dp[id][j] = max( dp[id][j], dp[id-1][j-currBuy*currW] + gain ); } if(totalProducts == items[currProd].second) { currProd++; totalProducts = 0; } } } id++; } ll ans = 0; int bestW = -1; for(int i=0; i<=s; i++) { if(dp[mp.size()][i] > ans) { ans = dp[mp.size()][i]; bestW = i; } } // for(int id=1; id<=mp.size(); id++) { // for(int j=1; j<=s; j++) { // cout << dp[id][j] << " "; // if(j == s) cout << '\n'; // } // } cout << ans << '\n'; return 0; }

컴파일 시 표준 에러 (stderr) 메시지

knapsack.cpp: In function 'int32_t main()':
knapsack.cpp:94:9: warning: variable 'bestW' set but not used [-Wunused-but-set-variable]
   94 |     int bestW = -1;
      |         ^~~~~
#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...