프로그램 언어/BaekJoon

DP(Dynaminc Programming)-3

찬영_00 2022. 7. 5. 16:33
728x90

문제.

https://www.acmicpc.net/submit/11727

 

로그인

 

www.acmicpc.net


방법.

백준 문제 11726에서 2x2의 블럭이 추가된 문제이다.

이것 또한 그림을 그리면서 풀었다.

 

n   갯수
1 1 arr[1] = 1
2 3 arr[2] = 3
3 5 arr[3] = arr[2] + 2 * arr[1]
4 11 arr[4] = arr[3] + 2 * arr[2]
5 21 arr[5] = arr[4] + 2 * arr[3]
6 43 arr[6] = arr[5] + 2 * arr[4]

따라서 arr[i] = arr[i-1] + (2 * arr[i-2])이라는 점화식을 얻을 수 있습니다.

코드로 나타내면,

int DP(int a) {
	if (a == 1) return arr[1];
	else if (a == 2) return arr[2];
	for (int i = 3; i <= a; i++) {
		arr[i] = (arr[i - 1] + 2 * arr[i - 2]) % 10007;
	}
	return arr[a];
}

이고 11726문제에서 점화식만 바뀐 모습을 확인할 수 있다.


처음 접근했던 방식.

처음 그림을 그리면서 식을 찾는데 어려움을 겪었다.

그래도 몇십분을 투자해보니 식이 보였다.

접근방식은 그림으로 접근했다.


해결 코드.

#include <iostream>

using namespace std;

int arr[1001];
int DP(int a);

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	int n;
	cin >> n;
	arr[1] = 1;
	arr[2] = 3;
	cout << DP(n);
	return 0;
}

int DP(int a) {
	if (a == 1) return arr[1];
	else if (a == 2) return arr[2];
	for (int i = 3; i <= a; i++) {
		arr[i] = (arr[i - 1] + 2 * arr[i - 2]) % 10007;
	}
	return arr[a];
}
728x90

'프로그램 언어 > BaekJoon' 카테고리의 다른 글

벌집  (0) 2025.03.02
DP(Dynaminc Programming)- 4  (1) 2022.07.26
DP(Dynaminc Programming)-2  (0) 2022.06.27
DP(Dynaminc Programming)-1  (0) 2022.06.23
입출력_문제_1  (0) 2022.06.14