結果
| 問題 | No.1947 質より種類数 |
| コンテスト | |
| ユーザー |
koheijkt
|
| 提出日時 | 2026-05-14 10:26:03 |
| 言語 | PyPy3 (7.3.17) |
| 結果 |
AC
|
| 実行時間 | 538 ms / 2,000 ms |
| コード長 | 916 bytes |
| 記録 | |
| コンパイル時間 | 425 ms |
| コンパイル使用メモリ | 85,120 KB |
| 実行使用メモリ | 277,888 KB |
| 最終ジャッジ日時 | 2026-05-14 10:26:14 |
| 合計ジャッジ時間 | 8,193 ms |
|
ジャッジサーバーID (参考情報) |
judge3_1 / judge2_1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 37 |
ソースコード
N, V, C = map(int, input().split())
VW = [tuple(map(int, input().split())) for _ in range(N)]
dp = [[-1] * (V + 1) for _ in range(N + 1)]
dp[0][0] = 0
def chmax(DP,i,v):
if DP[i] < v: DP[i] = v
def chmin(DP,i,v):
if DP[i] > v: DP[i] = v
# もらうDP
for i in range(1, N + 1): # dp表の行番号
v, w = VW[i - 1]
for j in range(V + 1):
candi = -1
# 上から ... dp[i - 1][j]
x = dp[i - 1][j]
if x != -1:
candi = dp[i - 1][j]
# 斜め上から ... dp[i - 1][j - v]
if j - v >= 0:
y = dp[i - 1][j - v]
if y != -1:
# 種類数が増える
candi = max(candi, y + C + w)
# 左から ... dp[i][j - v]
z = dp[i][j - v]
if z != -1:
candi = max(candi, z + w)
if candi != -1:
dp[i][j] = candi
ans = max(dp[-1])
print(ans)
koheijkt