设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
版权声明:本文为博主原创文章,转载请附上博文链接!