結果
| 問題 |
No.1430 Coup de Coupon
|
| コンテスト | |
| ユーザー |
ygd.
|
| 提出日時 | 2021-04-02 18:29:32 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 558 ms / 2,000 ms |
| コード長 | 1,034 bytes |
| コンパイル時間 | 208 ms |
| コンパイル使用メモリ | 82,200 KB |
| 実行使用メモリ | 273,004 KB |
| 最終ジャッジ日時 | 2024-12-23 14:47:11 |
| 合計ジャッジ時間 | 7,604 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / 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: break
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個目に値引きを使う
if jp < len(XP):
dp[i+1][j] = max(dp[i+1][j], dp[i][j] + P[i]*XP[jp]//100) #i個目に割引を使う
else:
dp[i+1][j] = dp[i][j] #既に割引券が切れている場合
#print(dp)
ans = All - max(dp[N])
print(ans)
ygd.