Submission #1271856

#TimeUsernameProblemLanguageResultExecution timeMemory
1271856wqqKnapsack (NOI18_knapsack)C++20
29 / 100
143 ms1864 KiB
#include <bits/stdc++.h> using namespace std; #define ent "\n" #define all(a) (a).begin(), (a).end() #define int int64_t #define pii pair<int,int> using ld = long double; const int MOD = 1e9 + 7; const int inf = 1e18; int32_t main() { ios::sync_with_stdio(false); cin.tie(0); int s, n; cin >> s >> n; vector<array<int, 3>> a(n); bool isk1 = 1; for (int i = 0; i < n; ++i) { cin >> a[i][0] >> a[i][1] >> a[i][2]; if (a[i][2] != 1) { isk1 = 0; } } if (n == 1) { int ans = 0; for (int i = 1; i <= a[0][2]; ++i) { if (a[0][1] * i <= s) { ans = a[0][0] * i; } } cout << ans; } else if (isk1) { // dp[i][j] = i elements with j -> cost vector<vector<int>> dp(n+1,vector<int> (s+1,-inf)); dp[0][0] = 0; for (int i = 0; i < n; ++i) { if (a[i][1] <= s) { dp[1][a[i][1]] = a[i][2]; } } for (int i = 1; i <= n; ++i) { for (int j = 0; j <= s; ++j) { dp[i][j] = dp[i - 1][j]; int prev = j - a[i - 1][1]; if (prev >= 0 && dp[i - 1][prev] != -inf) { dp[i][j] = max(dp[i][j], dp[i - 1][prev] + a[i - 1][0]); } } } int ans = 0; for (int i = 1; i <= n; ++i) { for (int j = 0; j <= s; ++j) { ans = max(ans, dp[i][j]); } } cout << ans; } } int binpow(int base, int power) { if (power == 0) return 1; if (power == 1) return base; int x = binpow(base, power / 2); if (power & 1) return x * x * base; else return x * x; } int lcm(int a, int b) { return a / __gcd(a,b) * b; }
#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...