https://www.luogu.org/problem/show?pid=1028
题干 “2.在它的左边加上一个自然数,但该自然数不能超过原数的一半;”中的
“原数”的含义,就是 你加上的自然数/给出的n 。
蒟蒻的暴力递归
void plus(int x)
{
for(int i=1;i<=x/2;i++)
{cnt++; plus(i);}
}
(8个测试点TLE)
正解貌似是神犇 vegetabird 的简单DP(其实就是打表找规律)
本题的规律就是
n%2==0时 f(n)=f(n-1)+f(n/2)
n%2==1时 f(n)=f(n-1)
f(1)=f(0)=0
有了递推式就可以用for循环求解了。附代码
#include<cstdio>
using namespace std;
int num[1001];
void solve(int x)
{
num[0]=num[1]=1;
int i;
for (i=2;i<=x;i++)
{
if (i%2==0)
num[i]=num[i-1]+num[i/2];
else num[i]=num[i-1];
}
}
int main(void)
{
int n;
scanf("%d",&n);
solve(n);
printf("%d",num[n]);
return 0;
}