Submission #993120

#TimeUsernameProblemLanguageResultExecution timeMemory
993120cpdreamerKnapsack (NOI18_knapsack)C++17
12 / 100
1 ms604 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <utility> using namespace __gnu_pbds; using namespace std; typedef tree<int,null_type,less<int>,rb_tree_tag, tree_order_statistics_node_update> indexed_set; const int max_n=INT_MAX; typedef long long ll; #define LLM LONG_LONG_MAX #define pb push_back #define F first #define L length() #define all(v) v.begin(),v.end() #define P pair #define V vector #define S second const long long MOD = 1000000007; // 1e9 + 7 void file(){ freopen("input.txt.txt","r",stdin); freopen("output.txt.txt","w",stdout); } void setio(string s) { freopen((s + ".in").c_str(), "r", stdin); freopen((s + ".out").c_str(), "w", stdout); } bool is_sorted(int A[],int n) { for (int i = 0; i < n - 1; i++) { if (A[i] > A[i + 1]) return false; } return true; } void solve() { int W, n; cin >> W >> n; int v[n], k[n], w[n]; V<V<P<ll, ll>>> vp(W + 1); V<V<P<ll, ll>>> pref(W + 1); for (int i = 0; i < n; i++) { cin >> v[i] >> w[i] >> k[i]; vp[w[i]].pb({v[i], k[i]}); } ll dp[W + 1]; bool made[W + 1]; memset(dp, -1, sizeof(dp)); memset(made, false, sizeof(dp)); dp[0] = 0; made[0] = true; for (int i = 1; i <= W; i++) { sort(all(vp[i])); reverse(all(vp[i])); } for (int i = 1; i <= W; i++) { if (!vp[i].empty()) { pref[i].pb({vp[i][0].F*vp[i][0].S,vp[i][0].S}); for (int j = 1; j < vp[i].size(); j++) { pref[i].pb({vp[i][j].F*vp[i][j].S + pref[i][j - 1].F, vp[i][j].S + pref[i][j - 1].S}); } } } for (int i = 1; i <= W; i++) { if (!vp[i].empty()) { for (int j = W; j >= i; j--) { int weight = j; int l = 0, r = (int)pref[i].size() - 1; int ans = -1; while (l <= r) { int m = l + (r - l) / 2; if (pref[i][m].S * i >= j) { ans = m; r = m - 1; } else l = m + 1; } if (ans == -1) ans = (int) vp[i].size() - 1; int a = 0; ll value=0; if (ans > 0) { a = (int) pref[i][ans - 1].S * i; value = (int) pref[i][ans - 1].F; } weight -= a; int add = min((weight / i),(int)vp[i][ans].S); a += add*i; value+=(int) vp[i][ans].F * add; if (made[j - a]) { made[j] = true; dp[j] = max(dp[j], dp[j - a] + value); } } } } cout << *max_element(dp, dp + W + 1) << endl; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); //file(); solve(); return 0; }

Compilation message (stderr)

knapsack.cpp: In function 'void solve()':
knapsack.cpp:59:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   59 |             for (int j = 1; j < vp[i].size(); j++) {
      |                             ~~^~~~~~~~~~~~~~
knapsack.cpp: In function 'void file()':
knapsack.cpp:22:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   22 |     freopen("input.txt.txt","r",stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
knapsack.cpp:23:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   23 |     freopen("output.txt.txt","w",stdout);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
knapsack.cpp: In function 'void setio(std::string)':
knapsack.cpp:26:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   26 |     freopen((s + ".in").c_str(), "r", stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
knapsack.cpp:27:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   27 |     freopen((s + ".out").c_str(), "w", stdout);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...