結果
問題 | No.1861 Required Number |
ユーザー | chineristAC |
提出日時 | 2022-03-04 22:33:11 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 1,144 ms / 2,500 ms |
コード長 | 842 bytes |
コンパイル時間 | 171 ms |
コンパイル使用メモリ | 82,072 KB |
実行使用メモリ | 81,048 KB |
最終ジャッジ日時 | 2024-07-18 23:06:45 |
合計ジャッジ時間 | 16,680 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 42 RE * 4 |
ソースコード
import sys,random,bisect from collections import deque,defaultdict from heapq import heapify,heappop,heappush from itertools import permutations from math import log,gcd input = lambda :sys.stdin.readline().rstrip() mi = lambda :map(int,input().split()) li = lambda :list(mi()) N,K = mi() A = li() assert N <= 10**4 assert K <= 10**3 dp = [0 for i in range(N+1)] dp[0] = 1 mask = 2**(K+1)-1 for i in range(N): dp[i+1] = (dp[i]|(dp[i]<<A[i]))&mask dp_back = [0 for i in range(N+1)] dp_back[N] = 1 for i in range(N)[::-1]: dp_back[i] = (dp_back[i+1]|(dp_back[i+1]<<A[i])) & mask if dp[-1]>>K & 1 == 0: exit(print(-1)) need = 0 for i in range(N): flag = True for k in range(K+1): if dp[i]>>k & 1: if dp_back[i+1]>>(K-k) & 1: flag = False if flag: need += 1 print(need)