結果
| 問題 |
No.437 cwwゲーム
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2016-11-27 17:07:38 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
AC
|
| 実行時間 | 32 ms / 2,000 ms |
| コード長 | 1,588 bytes |
| コンパイル時間 | 79 ms |
| コンパイル使用メモリ | 12,544 KB |
| 実行使用メモリ | 11,008 KB |
| 最終ジャッジ日時 | 2024-10-12 08:40:42 |
| 合計ジャッジ時間 | 2,582 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 41 |
ソースコード
import collections
def read_data():
Nstr = input()
data = [int(n) for n in Nstr]
return data
memo = collections.defaultdict(int)
ww = list()
def solve(data):
global memo, ww
init_ww(data)
if len(data) == 13:
return 100
return solve_core(data, 0)
def init_ww(data):
global ww
n = len(data)
for i, w0 in enumerate(data):
row = []
for j in range(i + 1, n):
if data[j] == w0:
row.append(j)
ww.append(row)
def solve_core(data, idx):
global memo, ww
N = lst2int(data)
if N in memo:
return memo[N]
n = len(data)
record = 0
for idx1 in range(idx, n - 2):
c = data[idx1]
if c == 0 or c == -1:
continue
data[idx1] = -1
for idx2 in range(idx1 + 1, n - 1):
w = data[idx2]
if w == c or w == -1:
continue
data[idx2] = -1
cww = c * 100 + w * 11
for idx3 in ww[idx2]:
if data[idx3] == -1:
continue
data[idx3] = -1
score = solve_core(data, idx1 + 1) + cww
if record < score:
record = score
data[idx3] = w
data[idx2] = w
data[idx1] = c
memo[N] = record
return record
def lst2int(data):
val = 0
for v in data:
if v == -1:
continue
else:
val *= 10
val += v
return val
data = read_data()
print(solve(data))