分野別 初中級者が解くべき過去問精選 100 問 全探索:全列挙

qiita.com

1~4 全探索:全列挙を解く

分野ごとに解いていきます。

ITP1_7_B - How Many Ways? 

from itertools import combinations

while True:
    n,x =map(int,input().split())
    if n==x and n==0:
        break
    
    L = [i for i in range(1,n+1)]
    cnt = 0
    for i in list(combinations(L,3)):
        if  sum(list(i))==x:
            cnt+=1
    print(cnt)

 

AtCoder Beginner Contest 106 B - 105

N = int(input())
ans = 0
for i in range(1,N+1,2):
    cnt = 0
    for j in range(1,i):
        if i%j==0:
            cnt+=1
    if cnt==7:
        ans+=1
print(ans)

AtCoder Beginner Contest 122 B - ATCoder

S = input()
cnt=0
LEN = len(S)+1
for s in range(LEN):
    for e in range(LEN):
        if len(set(S[s:e])-set(['A','G','C','T']))==0 and len(S[s:e])>cnt:
            cnt = len(S[s:e])
print(cnt)

パ研杯2019 C - カラオケ

N,M = map(int,input().split())
A =[]
for n in range(N):
    A.append([int(i) for i in input().split()])
    
from itertools import combinations
L = [int(i) for i in range(len(A[0]))]
ans = 0
for i in list(combinations(L,2)):
    tmp = 0
    for n in range(N):
        tmp += max(A[n][i[0]],A[n][i[1]])
    if tmp > ans:
        ans=tmp
print(ans)

こうしてみるとitertools で組み合わせを作って解いているパターンが多いな
眠いので今日はここまで。