結果
問題 | No.2364 Knapsack Problem |
ユーザー | McGregorsh |
提出日時 | 2023-06-30 22:13:18 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 384 ms / 3,000 ms |
コード長 | 1,927 bytes |
コンパイル時間 | 301 ms |
コンパイル使用メモリ | 86,996 KB |
実行使用メモリ | 92,628 KB |
最終ジャッジ日時 | 2023-09-21 16:16:50 |
合計ジャッジ時間 | 8,190 ms |
ジャッジサーバーID (参考情報) |
judge15 / judge12 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 225 ms
89,876 KB |
testcase_01 | AC | 232 ms
89,888 KB |
testcase_02 | AC | 237 ms
90,488 KB |
testcase_03 | AC | 229 ms
90,076 KB |
testcase_04 | AC | 244 ms
91,312 KB |
testcase_05 | AC | 251 ms
91,824 KB |
testcase_06 | AC | 246 ms
91,488 KB |
testcase_07 | AC | 311 ms
92,116 KB |
testcase_08 | AC | 231 ms
89,868 KB |
testcase_09 | AC | 265 ms
92,000 KB |
testcase_10 | AC | 295 ms
92,036 KB |
testcase_11 | AC | 252 ms
91,928 KB |
testcase_12 | AC | 381 ms
92,612 KB |
testcase_13 | AC | 365 ms
92,524 KB |
testcase_14 | AC | 371 ms
92,360 KB |
testcase_15 | AC | 354 ms
92,292 KB |
testcase_16 | AC | 371 ms
92,200 KB |
testcase_17 | AC | 384 ms
92,628 KB |
testcase_18 | AC | 362 ms
92,052 KB |
testcase_19 | AC | 373 ms
92,156 KB |
testcase_20 | AC | 370 ms
92,516 KB |
testcase_21 | AC | 371 ms
92,292 KB |
ソースコード
import sys from sys import stdin from fractions import Fraction import math from math import ceil, floor, sqrt, pi, factorial, gcd from copy import deepcopy from collections import Counter, deque, defaultdict from heapq import heapify, heappop, heappush from itertools import accumulate, product, combinations, combinations_with_replacement, permutations from bisect import bisect, bisect_left, bisect_right from functools import reduce, lru_cache from decimal import Decimal, getcontext, ROUND_HALF_UP def i_input(): return int(stdin.readline()) def i_map(): return map(int, stdin.readline().split()) def i_list(): return list(i_map()) def s_input(): return stdin.readline()[:-1] def s_map(): return s_input().split() def s_list(): return list(s_map()) def lcm(a, b): return a * b // gcd(a, b) def get_distance(x1, y1, x2, y2): d = sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2) return d def rotate(table): n_fild = [] for x in zip(*table[::-1]): n_fild.append(x) return n_fild sys.setrecursionlimit(10 ** 7) INF = float('inf') MOD = 10 ** 9 + 7 MOD2 = 998244353 alpa = 'abcdefghijklmnopqrstuvwxyz' ALPA = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' def main(): N, M, W = i_map() A = i_list() B = i_list() C = i_list() D = i_list() for i in range(M): C[i] *= -1 D[i] *= -1 w = A + C v = B + D dp = [-INF] * (2 ** (N+M)) dp[0] = 0 for i in range(2**(N+M)): for j in range(N+M): a, b = w[j], v[j] p = 2 ** j if i | p != i: nxt = i | p flag = format(nxt, 'b').zfill(N+M)[::-1] cou = 0 for k in range(N+M): if flag[k] == '1': cou += w[k] if 0 <= cou <= W: dp[nxt] = max(dp[nxt], dp[i] + b) print(max(dp)) if __name__ == '__main__': main()