結果
| 問題 |
No.458 異なる素数の和
|
| コンテスト | |
| ユーザー |
yassu0320
|
| 提出日時 | 2021-07-03 16:16:26 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 1,370 ms / 2,000 ms |
| コード長 | 2,085 bytes |
| コンパイル時間 | 703 ms |
| コンパイル使用メモリ | 82,048 KB |
| 実行使用メモリ | 431,104 KB |
| 最終ジャッジ日時 | 2024-06-30 08:27:34 |
| 合計ジャッジ時間 | 10,388 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 28 |
ソースコード
#!/usr/bin/env python3
from sys import setrecursionlimit, stdin
from typing import Iterable
INF: int = 2**62
MOD: int = 10**9 + 7
setrecursionlimit(10**6)
def inputs(type_=int):
ins = input().split(' ')
ins = [x for x in ins if x != '']
if isinstance(type_, Iterable):
return [t(x) for t, x in zip(type_, ins)]
else:
return list(map(type_, ins))
def input_(type_=int):
a, = inputs(type_)
return a
inputi = input_
def inputstr():
return input_(str)
# b/a縺ョ蛻・j荳翫£
def ceil(b, a):
return (a + b - 1) // a
def answer(res) -> None:
print(res)
exit()
def compute():
return
def prime_iter():
"""
繧ィ繝ゥ繝医せ繝・ロ繧ケ縺ョ遽ゥ
險育ョ鈴㍼縺ッ O(n * sqrt(n) / log(n))
"""
ps = []
n = 2
while True:
for k in ps:
if n % k == 0:
break
elif k * k > n:
ps.append(n)
yield n
break
else:
ps.append(n)
yield n
n += 1
def main():
n = inputi()
# ps[i]: i逡ェ逶ョ縺ォ蟆上&縺・エ謨ー (ps[i] <= max(n//2, p-n//2))
# pi = len(ps)
# dp[i][k]: ps[i]繧剃スソ縺」縺ヲk繧剃ス懊k譎ゅ・譛螟ァ縺ョ蜥後・蝗樊焚
#
# dp[0][0] = 0
# 蛻晄悄蛹・ dp = [[-1] * (n+1) for _ in range(ps)]
# 譖エ譁ー:
# dp[i][k] = max(dp[i][k-1], dp[i-1][k-ps[i]] + 1)
# 蜃コ蜉・ dp[-1][n]
ps = []
iter_ = prime_iter()
while True:
p = next(iter_)
if p > n:
break
ps.append(p)
ps = [0] + ps
plen = len(ps)
dp = [[-1] * (n+1) for _ in range(plen)]
dp[0][0] = 0
for i in range(1, plen):
for k in range(n+1):
dp[i][k] = dp[i-1][k]
if k - ps[i] >= 0 and dp[i-1][k-ps[i]] >= 0:
dp[i][k] = max(1 + dp[i-1][k-ps[i]], dp[i-1][k])
# from pprint import pprint
# pprint(dp)
print(dp[-1][n])
if __name__ == '__main__':
main()
yassu0320