https://www.acmicpc.net/problem/1003
[필자 사고]
동적 프로그래밍 bottom-up 방식으로 푼 문제이다.
필자는 pair<int,int> 을 이용하여 첫번째 인덱스에는 0의 갯수를
두번째 인덱스에는 1의 개숫를 bottom-up 방식으로 늘려갔다.
점화식은 아래 코드해설 부분에 설명해 놓았다.
[코드 해설]
[소스 코드]
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
vector<pair<int, int>> dp;
void Make_DP() {
dp.resize(41);
dp[0] = { 1,0 };
dp[1] = { 0,1 };
dp[2] = { 1,1 };
for (int i = 3; i <= 40; i++) {
dp[i] = { dp[i - 1].first + dp[i - 2].first, dp[i - 1].second + dp[i - 2].second };
}
}
void Game_Start() {
int N;
cin >> N;
cout << dp[N].first << " " << dp[N].second << '\n';
}
int main(void) {
int T;
cin >> T;
Make_DP();
while (T--) {
Game_Start();
}
}
'백준 > 동적프로그래밍' 카테고리의 다른 글
백준 1699 c++ "제곱수의 합" -PlusUltraCode- (0) | 2025.02.10 |
---|---|
백준 11055 c++ "가장 큰 증가하는 부분 수열" -PlusUltraCode- (0) | 2025.02.10 |
백준 9095 c++ "1, 2, 3 더하기" -PlusUltraCode- (0) | 2025.02.09 |
백준 1463 c++ "1로 만들기" -PlusUltraCode- (0) | 2025.02.09 |
백준 10211 c++ "Maximum Subarray" -PlusUltraCode- (0) | 2025.02.09 |