hd acm2045

本文通过递推公式F[N]=F[N-1]+2*F[N-2]解决了LELE提出的RPG游戏中颜色涂法的问题,并给出了具体的大数运算实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LELE的RPG难题

析:

假设有N个方格时的涂法是F[N]种。当前边n-1个方格成立时,再加第n种颜色无影响,此时有F[N-1]种涂法,当n-1个方格违法时,即有两个相邻的格子颜色相同,则有n-2个颜色合法,即F[N-2],第N种颜色有两种,此时2*F[N-1];继续分析n-3,发现要么是与前边情况重复,要么不存在这种情况。综上,F[N]=F[N-1]+2*F[N-2]。

代码:

#include <stdio.h>
#include <stdlib.h>

int main()                                   //大数运算的套路。
{
  int way[51][50]={0};
  int n,i,j;
  way[0][1]=3;
  way[1][1]=3;
  way[2][1]=6;
  way[3][1]=6;
  for(i=4;i<51;i++){
    for(j=1;j<50;j++){                                                             
      way[i][j]+=way[i-1][j]+2*way[i-2][j];
      way[i][j+1]+=way[i][j]/10000;
      way[i][j]%=10000;
    }
  }
  while(scanf("%d",&n)!=EOF){
    j=49;
    while(!way[n][j--]);
    printf("%d",way[n][j+1]);
    for(;j>0;j--){
      printf("%04d",way[n][j]);
    }
    printf("\n");
  }
return 0;
}

转载于:https://www.cnblogs.com/clljs/p/7464892.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值