爬梯菜单

假设n格梯有f(n)个方法。

然后:

f(1) = 1

f(2) = 2

右n & gt2、有:

F(n) =(先有一个网格,然后n-1网格的方法数)+(先有两个网格,然后n-2网格的方法数)

也就是

f(n) = f(n-1) + f(n-2)

所以f(n)是斐波那契数列的n+1项?

# include & ltstdio.h & gt

长纤维(整数)

{ if (n == 1 || n == 2)返回1;

返回光纤(n - 1) +光纤(n-2);

}

主()

{ int n;

scanf("%d ",& ampn);

printf("%ld\n ",fib(n+1));

返回0;

}

/*

练习9:上楼梯★★

上楼梯,可以一个一个上楼梯,也可以两个两个来。

也可以隔一两步上,甚至一次k步。

问题是,如果最后一步数是n,每一步可以上到1到k步,

你走了多少路?

如果n = 5,k = 2,是的。

1,1,1,1,1

2,1,1,1

1,2,1,1

1,1,2,1

1,1,1,2

2,2,1

2,1,2

1,2,2

共8种。

输入步数n (1

5 2

5 3

输出:

13

难度:容易

*/

# include & ltstdio.h & gt

# include & ltstring.h & gt

int d[31][31];

int dfs(int left,int k)

{

int I;

if(d[left][k]!=-1)返回d[left][k];

如果(!左)返回1;

d[left][k]= 0;

for(I = 1;我& lt=((left & lt;k)?左:k);i++)

d[left][k]+=dfs(left-i,k);

return d[左][k];

}

int main(void)

{

int n,k;

memset(d,-1,sizeof(d));

while(scanf("%d%d ",& ampn & amp;k)!=EOF)

printf("%d\n ",dfs(n,k));

返回0;

}