伯準-部分数列の和(1182)
7397 ワード
Brute Force
質問する
N個の整数からなる数列があり、その数列のすべての要素のサイズがSである場合、整数を求めるプログラムが作成される.
入力
第1行は、整数個数を表すNおよび整数Sを与える.(1≦N≦20,|S|≦1000000)2行目にはN個の整数スペースがある.与えられた整数の節価は100000を超えない.
しゅつりょく
1行目とSの部分数列の個数を出力します.
1)コンビネーションライブラリの使用
import sys
from itertools import combinations
n, target = map(int, sys.stdin.readline().split())
li = list(map(int, sys.stdin.readline().split()))
count = 0
for i in range(1, len(li) + 1):
answer = list(combinations(li, i))
for idx in range(len(answer)):
if sum(answer[idx]) == target:
count += 1
print(count)
2)再帰関数の使用import sys
input = sys.stdin.readline
n, target = map(int, input().split())
li = list(map(int, input().split()))
answer = 0
def subSet(idx, total):
global answer
if idx >= n:
return
total += li[idx]
if total == target:
answer += 1
subSet(idx + 1, total - li[idx]) # 방금 누적했던 원소값을 다시 빼서 다음 인덱스의 원소값을 더하지 않는 상태
subSet(idx + 1, total) # 다음 인덱스 원소값을 더한 상태에서 그대로 다시 재귀호출.
subSet(0, 0)
print(answer)
参照)https://dongsik93.github.io/algorithm/2019/11/13/algorithm-boj-1182/
https://infinitt.tistory.com/274
Reference
この問題について(伯準-部分数列の和(1182)), 我々は、より多くの情報をここで見つけました https://velog.io/@skkfea07/백준-부분수열의-합テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol