这题是递归加打表加DP(给大佬ORZ)
打表代码:
#include<iostream>
using namespace std;
int sum = 0;
void dfs(int n)
{
sum++;
if (n == 1) return;
for (int i = 1; i <= n / 2; i++)
dfs(i);
}
int main()
{
int n;
for (n = 1; n < 20; n++)
{
sum = 0;
dfs(n);
cout << n << " " << sum << endl;
}
//system("pause");
return 0;
}
DP代码:
#include<bits/stdc++.h>
using namespace std;
#define maxn 1010
int dp[1010] = { 0 };
int main()
{
int n;
scanf("%d", &n);
dp[1] = 1;
for(int i = 2; i <= n; i++)
{
if(i % 2 == 0) dp[i] = dp[i - 1] + dp[i / 2];
else dp[i] = dp[i - 1];
}
cout << dp[n] << endl;
return 0;
}