結果

問題 No.733 分身並列コーディング
ユーザー lam6er
提出日時 2025-04-16 15:25:31
言語 PyPy3
(7.3.15)
結果
TLE  
実行時間 -
コード長 1,269 bytes
コンパイル時間 402 ms
コンパイル使用メモリ 81,836 KB
実行使用メモリ 78,688 KB
最終ジャッジ日時 2025-04-16 15:27:42
合計ジャッジ時間 22,950 ms
ジャッジサーバーID
(参考情報)
judge3 / judge5
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 43 TLE * 3
権限があれば一括ダウンロードができます

ソースコード

diff #

def main():
    import sys
    input = sys.stdin.read().split()
    idx = 0
    T = int(input[idx])
    idx += 1
    N = int(input[idx])
    idx += 1
    t = []
    for _ in range(N):
        t.append(int(input[idx]))
        idx += 1
    
    # Precompute sum for all subsets
    sum_subset = [0] * (1 << N)
    for s in range(1 << N):
        total = 0
        for i in range(N):
            if s & (1 << i):
                total += t[i]
        sum_subset[s] = total
    
    full_mask = (1 << N) - 1
    INF = float('inf')
    dp = [INF] * (1 << N)
    dp[0] = 0  # No problems solved, 0 workers needed
    
    for mask in range(1 << N):
        if dp[mask] == INF:
            continue
        # Get available problems (not yet solved)
        available = (~mask) & full_mask
        # Generate all non-empty subsets of available
        subset = available
        while True:
            if subset != 0:
                if sum_subset[subset] <= T:
                    new_mask = mask | subset
                    if dp[new_mask] > dp[mask] + 1:
                        dp[new_mask] = dp[mask] + 1
            if subset == 0:
                break
            subset = (subset - 1) & available
    
    print(dp[full_mask])

if __name__ == '__main__':
    main()
0