1차원 유형의 문제는 점화식이 확실하게 결정되어 있기 때문에 점화식만 구해낸다면 쉽게 문제를 풀어낼 수 있다.
그냥 풀면 시간 없는 문제
#define _CRT_SECURE_NO_WARNINGS
#define _USE_MATH_DEFINES
#include <iostream>
#include <vector>
#include <algorithm>
#include <stack>
#include <queue>
#include <cstdlib>
#include <cstring>
#include <functional>
#define ll long long
#define len 2001
using namespace std;
int d[len] = {0};
int fibo(int n) {
if (n <= 1) {
return d[n];
}else if (d[n]) return d[n];
return d[n]=fibo(n - 1) + fibo(n - 2);
}
int main(void) {
freopen("input.txt", "r", stdin);
int t;
cin >> t;
d[0] = 1;
d[1] = 1;
while (t--) {
int n;
cin >> n;
if (n == 0) cout << "1 0" << '\\\\n';
else if (n == 1) cout << "0 1" << '\\\\n';
else {
fibo(n);
cout << d[n - 2] << ' ' << d[n - 1] << '\\\\n';
}
}
}
#define _CRT_SECURE_NO_WARNINGS
#define _USE_MATH_DEFINES
#include <iostream>
#include <cstring>
#include <cstdio>
#include <functional>
#include <algorithm>
#include <cstdlib>
#include <vector>
#include <ctime>
#define ll long long
#define len 1001
using namespace std;
ll d[100];
int main(void) {
freopen("input.txt", "r", stdin);
int t;
cin >> t;
d[1] = d[2] = d[3] = 1;
for (int i = 4; i <= 100; ++i) {
d[i] = d[i - 2] + d[i - 3];
}
while (t--) {
int n;
cin >> n;
cout << d[n] << '\\\\n';
}
}
문제 처리 과정에서 나온 것을 출력하라는 게 추가로 요구된다. 보통 쉬운문제에다가 이거 하나 붙이면 어려워진다.
그냥 백트래킹 할 줄 알면 쉽게 풀린다.