完全探索week 3🤔


これは二つのVIXX課題の三つの問題の完全探索問題である.

麦芽糖を売る


問題を理解するのは難しい.これは切断されたマルトースの長さを徹底的に探求する問題である.
n, c, f= map(int, input().split())
arr = []
for _ in range(n):
    arr.append(int(input()))
m = max(arr)
all_lst = []
for i in range(1, m+1): # i는 길이!!!!!!
    prices = 0
    for ii in arr:
        if ii%i != 0:
            price = (ii//i)*i*f - (ii//i)*c
        else:
            price = (ii//i)*i*f - (ii//i-1)*c
        prices += price
    all_lst.append(prices)
print(max(all_lst))

IP採掘機


最初はDPS/DFSで解凍すべきですか?でも.
DPS/DFS/バックグラウンドトラッキングに関する迷路問題では,再帰関数がどのように動作するかを学習することが役立つ問題である.
pan = []
for _ in range(4):
    pan.append(list(input().split()))
dx=[-1, 0, 1, 0]
dy=[0, 1, 0, -1]
path = []
paths = []
def move(x, y,depth):
    global path
    global paths
    if depth ==9:
        # paths.append(path.copy())
        paths.append(' '.join(map(str, path)))
        return
    else:
        for i in range(4):
            xx=x+dx[i]
            yy=y+dy[i]
            if 0<=xx<=3 and 0<=yy<=3:
                path.append(pan[x][y])
                # path += pan[x][y]
                move(xx, yy, depth+1)
                path.pop()

for rownum in range(4):
    for colnum in range(4):
        move(rownum, colnum,1)
# print(paths)
# print(len(paths))
print(len(set(paths)))

怪盗


itertoolsの組合せは,組合せを用いて解決する問題である.
from itertools import combinations
n, m = map(int, input().split())
arr = list(input().split())
arr = [int(i) for i in arr]
lst = list(combinations(arr, 3))
l = [sum(i) for i in lst if sum(i) <= m]
print(max(l))