結果
| 問題 |
No.783 門松計画
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2022-06-23 20:48:27 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,822 bytes |
| コンパイル時間 | 193 ms |
| コンパイル使用メモリ | 82,944 KB |
| 実行使用メモリ | 85,428 KB |
| 最終ジャッジ日時 | 2024-11-07 14:03:44 |
| 合計ジャッジ時間 | 6,016 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 11 TLE * 1 -- * 15 |
ソースコード
import copy
n,c = map(int,input().split())
l = [int(i) for i in input().split()]
w = [int(i) for i in input().split()]
cdd = {}
for i in range(n):
if l[i] in cdd:
cdd[l[i]] = min(cdd[l[i]],w[i])
else:
cdd[l[i]] = w[i]
num = len(cdd)
if num <= 2:
print(0)
exit()
kh = []
for li in cdd:
kh.append([li,cdd[li]])
#kh.sort()
#print(kh)
dp = [[0]*(c+1) for i in range((num)*num)]
for i in range(num):
if kh[i][1] > c:
continue
dp[i][kh[i][1]] = kh[i][0]
ndp = [[0]*(c+1) for i in range((num)*num)]
for i in range(num):
for j in range(num):
if i == j:
continue
for k in range(c+1):
if dp[i][k] != 0 and k+kh[j][1] <= c:
#print(dp[i][k] + kh[j][0],i,j,k)
ndp[i*num+j][k+kh[j][1]] = max(dp[i][k] + kh[j][0],ndp[i*num+j][k+kh[j][1]])
dp = ndp#[:]#[:]
#print(dp)
#exit()
ans = 0
for m in range(c):
ndp = dp[:][:]#[[0]*(c+1) for i in range((num)*num)]
for i in range(num*num):
for j in range(num):
a0 = i//num
a1 = i%num
if a0 == j or a1 == j:#同じ長さならスルー
continue
for k in range(m,c+1):
if dp[i][k] != 0 and k+kh[j][1] <= c:
if a0 < a1:
if a1 > j:
tmp = max(dp[i][k] + kh[j][0],ndp[a1*num+j][k+kh[j][1]])
ndp[a1*num+j][k+kh[j][1]] = tmp
ans = max(tmp,ans)
else:
if a1 < j:
tmp = max(dp[i][k] + kh[j][0],ndp[a1*num+j][k+kh[j][1]])
ndp[a1*num+j][k+kh[j][1]] = tmp
ans = max(tmp,ans)
#print(dp,ndp)
dp = ndp[:]
print(ans)