結果
| 問題 | No.783 門松計画 | 
| コンテスト | |
| ユーザー |  | 
| 提出日時 | 2022-06-21 22:25:18 | 
| 言語 | PyPy3 (7.3.15) | 
| 結果 | 
                                WA
                                 
                             | 
| 実行時間 | - | 
| コード長 | 1,826 bytes | 
| コンパイル時間 | 260 ms | 
| コンパイル使用メモリ | 82,264 KB | 
| 実行使用メモリ | 119,176 KB | 
| 最終ジャッジ日時 | 2024-10-14 17:57:38 | 
| 合計ジャッジ時間 | 7,989 ms | 
| ジャッジサーバーID (参考情報) | judge3 / judge4 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| other | AC * 24 WA * 3 | 
ソースコード
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 = copy.deepcopy(dp)#[[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 = [[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)
            
            
            
        