반응형
https://www.acmicpc.net/problem/2798
발생할 수있는 모든 경우의 수를 조합으로 찾아서 푼다. 찾는 과정에서 조건을 걸어서 더 찾지 않아도 되는 구간은 넘어가게 했다.
package main
import (
"bufio"
"fmt"
"os"
)
var reader = bufio.NewReader(os.Stdin)
var writer = bufio.NewWriter(os.Stdout)
func printf(f string, a ...interface{}) { fmt.Fprintf(writer, f, a...) }
func scanf(f string, a ...interface{}) { fmt.Fscanf(reader, f, a...) }
var n, m, result int
var card [102]int
func combi(start, num, sum int) {
if m < sum || num == 0 || n-start < num {
return
}
if num == 1 && sum > result {
result = sum
}
for i := start + 1; i < n; i++ {
combi(i, num-1, sum+card[i])
}
}
func main() {
scanf("%d %d\n", &n, &m)
for i := 0; i < n; i++ {
scanf("%d", &card[i])
}
for i := 0; i <= n-3; i++ {
combi(i, 3, card[i])
}
printf("%d\n", result)
writer.Flush()
}
'Study > algorithms' 카테고리의 다른 글
[백준] 7568 덩치 (0) | 2020.01.22 |
---|---|
[백준] 2231 분해합 (0) | 2020.01.21 |
[백준] 11729 하노이 탑 이동 순서 (0) | 2020.01.20 |
[백준] 2447 별 찍기 - 10 (0) | 2020.01.19 |
[백준] 10870 피보나치수 5 (0) | 2020.01.19 |