結果
| 問題 |
No.1430 Coup de Coupon
|
| コンテスト | |
| ユーザー |
ygd.
|
| 提出日時 | 2021-04-02 18:26:33 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 725 ms / 2,000 ms |
| コード長 | 1,149 bytes |
| コンパイル時間 | 266 ms |
| コンパイル使用メモリ | 82,176 KB |
| 実行使用メモリ | 273,036 KB |
| 最終ジャッジ日時 | 2024-12-23 14:41:43 |
| 合計ジャッジ時間 | 9,259 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 27 |
ソースコード
N,C = map(int, input().split())
P = []
for _ in range(N):
p = int(input())
P.append(p)
P.sort(reverse = True)
#print(P)
T = []; X = []
for _ in range(C):
t,x = map(int,input().split())
T.append(t); X.append(x)
XF = []; XP = []
for i in range(C):
if T[i] == 1:
XF.append(X[i])
else:
XP.append(X[i])
XF.sort(reverse=True); CF = len(XF)
XP.sort(reverse=True)
#print(XF)
#print(XP)
All = sum(P)
#dp[i][j]: i番目まで見てj個値引を使ったときの値引き額の最大
dp = [[0]*(CF+1) for _ in range(N+1)]
for i in range(N):
for j in range(CF+1):
jp = i - j
if jp < 0: continue
if j+1 < CF + 1:
dp[i+1][j+1] = max(dp[i+1][j+1], dp[i][j] + min(P[i],XF[j])) #i個目に値引きを使う
#else:
# dp[i+1][j] = max(dp[i][j], dp[i][j])
if jp < len(XP):
#print("P",i,j,dp[i][j])
dp[i+1][j] = max(dp[i+1][j], dp[i][j] + P[i]*XP[jp]//100) #i個目に割引を使う
else:
#print("N",i,j,dp[i][j])
dp[i+1][j] = max(dp[i][j], dp[i][j])
#print(dp)
ans = All - max(dp[N])
print(ans)
ygd.