※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 15817번 문제인 배수 공사이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/15817
15817번: 배수 공사
합친 파이프의 길이 x를 만들 수 있는 방법의 수를 출력한다. 방법의 수가 2,147,483,647를 넘는 경우는 없다.
www.acmicpc.net
각 길이의 파이프는 0~C개씩을 선택할 수 있고, 같은 길이의 파이프는 두번 이상 주어지지 않는다는 점을 눈여겨보자.
이를 이용하여 각 길이의 파이프마다 개수별로 knapsack 문제를 풀듯이 문제를 해결할 수 있다.
아래는 제출한 소스코드이다.
#include <iostream>
using namespace std;
int arr[10001];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
arr[0] = 1;
int N, x; cin >> N >> x;
while (N--) {
int L, C; cin >> L >> C;
for (int i = x; i > 0; i--) {
int LL = 0;
for (int j = 0; j < C; j++) {
LL += L;
if (i - LL < 0) break;
arr[i] += arr[i - LL];
}
}
}
cout << arr[x] << '\n';
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 8907 // C++] 네온 사인 (0) | 2021.10.27 |
---|---|
[BOJ 15824 // C++] 너 봄에는 캡사이신이 맛있단다 (0) | 2021.10.26 |
[BOJ 2392 // C++] 다각형의 분할 (0) | 2021.10.24 |
[BOJ 1215 // C++] 잘못 작성한 요세푸스 코드 (0) | 2021.10.23 |
[BOJ 6523 // C++] 요세푸스 한 번 더! (0) | 2021.10.22 |