Submission #784028

#TimeUsernameProblemLanguageResultExecution timeMemory
784028rainboyKnapsack (NOI18_knapsack)C11
73 / 100
1067 ms1236 KiB
#include <stdio.h> #include <string.h> #define M 2000 int max(int a, int b) { return a > b ? a : b; } int main() { static int dp[M + 1], dq[M + 1], qu[M + 1]; int n, m, r, s, ans, head, cnt; scanf("%d%d", &m, &n); memset(dp, -1, (m + 1) * sizeof *dp), dp[0] = 0; while (n--) { int v, w, k; scanf("%d%d%d", &v, &w, &k); for (r = 0; r < w; r++) { head = cnt = 0; for (s = r; s <= m; s += w) { if (dp[s] != -1) { dq[s] = dp[s] - s / w * v; while (cnt && dq[qu[head + cnt - 1]] <= dq[s]) cnt--; qu[head + cnt++] = s; } dp[s] = cnt == 0 ? -1 : dq[qu[head]] + s / w * v; if (cnt && (s - qu[head]) / w == k) head++, cnt--; } } } ans = 0; for (s = 0; s <= m; s++) ans = max(ans, dp[s]); printf("%d\n", ans); return 0; }

Compilation message (stderr)

knapsack.c: In function 'main':
knapsack.c:12:2: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   12 |  scanf("%d%d", &m, &n);
      |  ^~~~~~~~~~~~~~~~~~~~~
knapsack.c:17:3: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   17 |   scanf("%d%d%d", &v, &w, &k);
      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...