J涂色问题

 

图中如果n-1的颜色和第一个的颜色不同,那么最后一个格子有1种涂色的方法   也就是  a(n-1)  

       如果n-1的颜色和第一个的颜色相同,那么最后一个格子有2种涂色的方法   也就是 2*a(n-2) 

 

通过树形图可以看出,对于本题,要分不同的情况讨论n=1,n=2,(n=3,n>=4)。

n=1时

三种填涂方法

n=2时

左面三种,右边有对应的两种填涂方法,一共6种填涂方法

n=3时

有6种填涂方法

n>=4时

An=2*An-2+An-1

 

 

要注意a[n]的数据类型,不然会爆。


#include<stdio.h>
long  long int a[60];

int main()
{
    int N;
    a[1]=3;
    a[2]=a[3]=6;
    for(int i=4;i<55;++i)
    {
        a[i]=2*a[i-2]+a[i-1];
    }
    while(~scanf("%d",&N))
    {
      if(N==1) printf("3\n");
      else if(N==2) printf("6\n");
      else if(N>=3)
      {
          printf("%lld\n",a[N]);
      }
    }
    return 0;
}

 

那么如果说颜色不是三个

m表示色的种数,an是方案数

an=(m-2)*a(n-1)+(m-1)*a(n-2)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值