-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path1003.cpp
More file actions
68 lines (57 loc) · 1005 Bytes
/
1003.cpp
File metadata and controls
68 lines (57 loc) · 1005 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <iostream>
using namespace std;
long long zero[41];
long long one[41];
long long sum[41];
int dp(int n, int target)
{
if (sum[n] != 0)
return sum[n];
if (n == 0)
{
zero[target]++;
return 0;
}
if (n == 1)
{
one[target]++;
return 1;
}
int sum1, sum2;
if (sum[n - 1] > 0)
{
sum1 = sum[n - 1];
zero[target] = zero[target] + zero[n - 1];
one[target] = one[target] + one[n - 1];
}
else
sum1 = dp(n - 1, target);
if (sum[n - 2] > 0)
{
sum2 = sum[n - 2];
zero[target] = zero[target] + zero[n - 2];
one[target] = one[target] + one[n - 2];
}
else
sum2 = dp(n - 2, target);
return sum[target] = sum1 + sum2;
}
int main()
{
int testcase;
cin >> testcase;
while (testcase--)
{
int N;
cin >> N;
for (int i = 0; i <= 40; ++i)
{
zero[i] = 0;
one[i] = 0;
sum[i] = 0;
}
for (int i = 0; i <= N; ++i)
dp(i, i);
cout << zero[N] << " " << one[N] << endl;
}
}