結果

問題 No.2232 Miser's Gift
ユーザー TsReaper
提出日時 2023-03-03 21:31:44
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 26 ms / 2,000 ms
コード長 730 bytes
コンパイル時間 1,790 ms
コンパイル使用メモリ 190,652 KB
最終ジャッジ日時 2025-02-11 01:54:33
ジャッジサーバーID
(参考情報)
judge3 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 55
権限があれば一括ダウンロードができます
コンパイルメッセージ
main.cpp: In function ‘int main()’:
main.cpp:13:10: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   13 |     scanf("%d%d", &n, &m);
      |     ~~~~~^~~~~~~~~~~~~~~~
main.cpp:14:39: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   14 |     for (int i = 1; i <= n; i++) scanf("%d%d", &W[i], &V[i]);
      |                                  ~~~~~^~~~~~~~~~~~~~~~~~~~~~

ソースコード

diff #

#include <bits/stdc++.h>
#define MAXN 100
#define MAXM ((int) 1e5)
#define INF ((long long) 1e18)
using namespace std;

int n, m, W[MAXN + 10], V[MAXN + 10];

long long f[MAXM + 10];
int g[MAXM + 10];

int main() {
    scanf("%d%d", &n, &m);
    for (int i = 1; i <= n; i++) scanf("%d%d", &W[i], &V[i]);

    for (int i = 0; i <= m; i++) f[i] = -INF;
    f[0] = 0;
    for (int i = 1; i <= n; i++) for (int j = m; j >= W[i]; j--) f[j] = max(f[j], f[j - W[i]] + V[i]);

    g[0] = 0;
    for (int i = 1; i <= m; i++) {
        g[i] = g[i - 1];
        if (f[i] > f[g[i]]) g[i] = i;
    }
    for (int i = m - 1; i >= 0; i--) {
        long long delta = f[g[m]] - f[g[i]];
        printf("%lld\n", delta + 1);
    }
    return 0;
}
0