개발/알고리즘

2133_Tri Tiling(DP)

송디 2020. 10. 31. 23:55

3 * n 타일에 2 * 1 타일을 얼만큼 넣을 수 있는지 푸는 문제이다.    
짝수 일 때만 만들어지고 끝에 2와 4가 남았을 때 점화식이 만들어지는 것 같아서,   
`DP[n] = DP[n - 2] * 3 + DP[n - 4] * 2 `   으로 했는데 원하는 값이 나오지 않았다.    
다시 고민하였을 때, `DP[n] = DP[n - 2] * 3 + DP[n - 4] * 2 + DP[n - 6] * 2 + ... DP[0] * 2 + 2  ` 
이런식으로 2개씩 계속 추가적으로 생산이 되는 것을 알 수 있었다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<iostream> 
 
using namespace std
 
int main(void) { 
int n; 
int dp[31= { 0 }; 
 
dp[0= 0; dp[1= 0; dp[2= 3
cin >> n; 
for (int i = 4; i <= n; i += 2) { 
dp[i] += dp[i - 2* 3
for (int k = 4; k <= i; k += 2) { 
dp[i] += dp[i - k] * 2
dp[i] += 2
cout << dp[n] << '\n'
cs
728x90

'개발 > 알고리즘' 카테고리의 다른 글

10825_국영수  (0) 2020.11.14
20057_마법사 상어와 토네이도  (0) 2020.11.03
11726번: 2×n 타일링  (0) 2020.10.25
알고리즘 입출력_  (0) 2020.10.11
백준_입출력(1)  (0) 2020.10.06