문제접근
•
규칙성을 발견
p[6]부터 구하고자 하는 값의 전의 값과 맨 처음값의 합을 통해서 구할 수 있다는 것을 알 수 있음
→ p[n] = p[n-1] + p[i++]
//pseudo code
cin >> t;
cin >> n;
dp[5]까지는 초기화
while // n까지 구함
dp[i] = dp[i-1] + dp[j++]
C++
복사
놓쳤던 부분
•
자료형을 신경쓰지 못 했음
코드
2016 KB
0 ms
#include <iostream>
#include <vector>
int t;
std::vector<long long> dp;
void input_setting()
{
std::ios_base::sync_with_stdio(false);
std::cin.tie(0);
std::cout.tie(0);
}
void solution()
{
int n;
int i, j;
i = 5;
j = 0;
std::cin >> n;
dp.resize(n + 1);
dp[1] = 1;
dp[2] = 1;
dp[3] = 1;
dp[4] = 2;
dp[5] = 2;
while (++i <= n)
dp[i] = dp[i - 1] + dp[++j];
std::cout << dp[n] << "\n";
}
void input()
{
std::cin >> t;
while (t--)
solution();
}
int main(void)
{
input_setting();
input();
return (0);
}
C++
복사