結果
| 問題 | No.634 硬貨の枚数1 |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-05-15 21:32:45 |
| 言語 | PyPy3 (7.3.17) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 555 bytes |
| 記録 | |
| コンパイル時間 | 185 ms |
| コンパイル使用メモリ | 85,376 KB |
| 実行使用メモリ | 89,984 KB |
| 最終ジャッジ日時 | 2026-05-15 21:33:05 |
| 合計ジャッジ時間 | 5,956 ms |
|
ジャッジサーバーID (参考情報) |
judge1_0 / judge3_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 11 TLE * 1 -- * 63 |
ソースコード
n=int(input())
z=[0]*(n+1)
q,w=0,n
while w-q>1:
m=(q+w)//2
if (m+1)*m//2<=n:
q=m
else:
w=m
x=[0]*q
y=[(i+1)*(i+2)//2 for i in range(q)]
for i in range(q-1,-1,-1):
p=0
for j in range(y[i],n+1,y[i]):
if z[j]:
break
p+=1
x[i]=p
dp=[1<<60]*(n+1);p=0;dp[0]=0
for i in y:
for j in range(n,-1,-1):
if dp[j]==1<<60:
continue
for l in range(1,x[p]+1):
if j+l*i>n:
break
dp[j+l*i]=min(dp[j+l*i],dp[j]+l)
p+=1
print(dp[n])