P1192 台阶问题

Posted lijiahui-123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P1192 台阶问题相关的知识,希望对你有一定的参考价值。

题解:

这其实是变相的斐波那契,观察下列等式:

//k=2 : 1 2 3 5 8  13 21 34......
//k=3 : 1 2 4 7 13 24 44 81...
//k=4 : 1 2 4 8 15 29 56 108...
//k=5 : 1 2 4 8 16 31 61 120...

我们不难发现当n<=k时第N项=(上一项*2)%100003,当n>k时第N项=(上一项*2-第n-1-k项)%100003; 所以递推式就是f(x)=x<=n?f(x-1)*2:f(x-1)*2-f(x-1-k);

#include<iostream>
using namespace std;

int main()
{
 int N,K;
 cin>>N>>K;
 
 int f[N+1]={0};
 f[1]=1,f[0]=1;
 int i=2;
 while(i<=N){
  if(i<=K){
   f[i]=f[i-1]*2%100003;
  }else{
   f[i]=(f[i-1]*2-f[i-1-K]+100003/*防止负数产生,我因为他WA了一次*/)%100003;           //这里要小心负数的出现
  }
  i++;
 }
 cout<<f[N]<<endl;
 return 0;
}

 

以上是关于P1192 台阶问题的主要内容,如果未能解决你的问题,请参考以下文章

[luogu p1192] 台阶问题

P1192 台阶问题

luogu P1192 台阶问题

[P1192]台阶问题 - 动态规划 - 递推

P1192 台阶问题

青蛙跳台阶衍生之变态跳台阶(递归,思路分析及代码实现)