알고리즘/다이나믹프로그래밍
[백준11726번 - 2xn 타일링]
leo_____lee
2018. 11. 3. 10:24
코드
풀이1
#include <iostream>
using namespace std;
class bj11726{
private:
int m_nVal;
int* m_pArr;
public:
bj11726() {
}
bj11726(int& val) {
while (val > 1 || val > 1000) {
cin >> val;
}
m_nVal = val;
m_pArr = new int[m_nVal];
}
~bj11726() {
delete[] m_pArr;
}
void SetVal() {
cin >> m_nVal;
while (m_nVal < 1 || m_nVal > 1000) {
cin >> m_nVal;
}
m_pArr = new int[m_nVal];
}
void SetArr() {
int i = 0;
if (m_nVal == 1) m_pArr[0] = 1;
else if (m_nVal == 2) {
m_pArr[0] = 1;
m_pArr[1] = 2;
}
else {
m_pArr[0] = 1;
m_pArr[1] = 2;
m_pArr[2] = 3;
i = 3;
while (i < m_nVal) {
m_pArr[i] = (m_pArr[i - 1]+m_pArr[i-2])%10007 ;
i++;
}
}
}
void printResult() {
cout << m_pArr[m_nVal-1];
}
};
int main()
{
bj11726 ex;
ex.SetVal();
ex.SetArr();
ex.printResult();
return 0;
}
그냥 넘어가기 아쉬워서...T[N]=T[N-1]+T[N-2]=T[N-2]+T[N-3]+T[N-2]=2T[N-2]+T[N-3]을 증명
// bj11726.cpp: 콘솔 응용 프로그램의 진입점을 정의합니다.
//
#include "stdafx.h"
#include <iostream>
using namespace std;
class bj11726{
private:
int m_nVal;
int* m_pArr;
public:
bj11726() {
}
bj11726(int& val) {
while (val > 1 || val > 1000) {
cin >> val;
}
m_nVal = val;
m_pArr = new int[m_nVal];
}
~bj11726() {
delete[] m_pArr;
}
void SetVal() {
cin >> m_nVal;
while (m_nVal < 1 || m_nVal > 1000) {
cin >> m_nVal;
}
m_pArr = new int[m_nVal];
}
void SetArr() {
int i = 0;
if (m_nVal == 1) m_pArr[0] = 1;
else if (m_nVal == 2) {
m_pArr[0] = 1;
m_pArr[1] = 2;
}
else {
m_pArr[0] = 1;
m_pArr[1] = 2;
m_pArr[2] = 3;
i = 3;
while (i < m_nVal) {
m_pArr[i] = (m_pArr[i - 3]+2*m_pArr[i-2])%10007 ;
i++;
}
}
}
void printResult() {
cout << m_pArr[m_nVal-1];
}
};
int main()
{
bj11726 ex;
ex.SetVal();
ex.SetArr();
ex.printResult();
return 0;
}
결과
실수한점
뒤에 런타임 에러로 인해 백준 사이트에서 100007로 나머지를 구하라 하였는데 귀찮아서 안했다가 두번이나 틀렸다...