【阿里】一个圆分成N个扇形,有M中颜色,求领域不同色的所有涂色方案数

设F(N,M)为满足的所有方案

N=1时,有M种

N=2时,有M*(M-1)种

N=3时,有M*(M-1)*(M-2)种

当N>=4时:

    先考虑所有可以重色的方案:即M*(M-1)*(M-1)*(M-1)

    其中包括第一块和最后一块重色的方案,只要减去即可。把第一块和最后一块作为同一个颜色块考虑的话,问题变为3区域不同色,即F(4,M) = M*(M-1)*(M-1)*(M-1) - F(3,M)。所以方案的递推公式是:

 

#include "stdio.h"
#include "math.h"
 
double recurve(int n,int m){
    double kinds;
    if(n==1){
        kinds = m;
    }
    if (n==2){
        kinds = m*(m-1);
    }
    if (n==3){
        kinds = m*(m-1)*(m-2);
    }
    if (n>3){
        kinds = m*pow(m-1,n-1) - recurve(n-1,m);
    }
    return kinds;
}
 
void main()
{
    int n,m;
    double kind;
    scanf("%d %d",&n,&m); 
    kind = recurve(n,m);
    printf("%f",kind);    
}
--------------------- 
作者:xiaocong1990 
来源:CSDN 
原文:https://blog.csdn.net/xiaocong1990/article/details/83117535 
版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值