Submission #682814

#TimeUsernameProblemLanguageResultExecution timeMemory
682814DeMen100nsKnapsack (NOI18_knapsack)C++17
12 / 100
1 ms372 KiB
#include <bits/stdc++.h> using namespace std; //debug #define dbg(a) cout << #a << " : " << a << endl; #define dbga(a, l, r) cout << #a << " : "; for(long long abc = l; abc <= r; ++abc) cout << a[abc] << " "; cout << endl #define dbgv(a) cout << #a << " : "; for(auto abc: a) cout << abc << " "; cout << endl //Finite Field const int MOD = 1e9 + 7; void add(int &a, int b, int mod = MOD){ a += b; while (a < 0) a += mod; while (a >= mod) a -= mod; } int sum(int a, int b, int mod = MOD){ return add(a, b, mod), a; } void mul(int &a, int b, int mod = MOD){ a = (a * 1LL * b) % mod; } int prod(int a, int b, int mod = MOD){ return mul(a, b, mod), a; } int bpow(int a, int b, int mod = MOD){ int ans = 1; while (b){ if (b & 1){ mul(ans, a, mod); } mul(a, a, mod); b >>= 1; } return ans; } int Inv(int a, int mod = MOD){ return bpow(a, mod - 2, mod); } int Div(int a, int b, int mod = MOD) { return prod(a, Inv(b, mod), mod); } const int N = 2e5 + 5; const long long INF = numeric_limits<long long>::max() / 2; const int MAXA = 1e9; const int B = sqrt(N) + 5; int v[N], w[N], k[N]; int dp[2005]; vector <int> a[2005]; signed main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, s; cin >> s >> n; for(int i = 1; i <= n; ++i){ cin >> v[i] >> w[i] >> k[i]; k[i] = min(k[i], s / w[i]); int pw = 1; while (pw <= k[i]){ a[w[i] * pw].push_back(v[i] * pw); k[i] -= pw; } if (k[i]){ a[w[i] * k[i]].push_back(v[i] * k[i]); } } for(int i = 1; i <= s; ++i){ sort(a[i].begin(), a[i].end()); while (!a[i].empty() && i * a[i].size() > s){ a[i].pop_back(); } } for(int w = 1; w <= s; ++w){ for(int v : a[w]){ for(int i = s; i >= w; --i){ dp[i] = max(dp[i], dp[i - w] + v); } } } cout << dp[s]; return 0; }

Compilation message (stderr)

knapsack.cpp: In function 'int main()':
knapsack.cpp:53:49: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   53 |         while (!a[i].empty() && i * a[i].size() > s){
      |                                 ~~~~~~~~~~~~~~~~^~~
#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...