#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
double dp[105][12];
int main()
{
int k,n,i,j;
double gailv,sum;
while(cin>>k>>n)
{
sum=0.0;
if(n<=1)
{
cout<<"100.00000"<<endl;
}
else
{
memset(dp,0,sizeof(dp));
gailv=1.0/(k+1);
for(i=0;i<=k;i++)
{
dp[1][i]=gailv;
}//第一位的概率!
for(i=2;i<=n;i++)
{
for(j=0;j<=k;j++)
{
dp[i][j]+=dp[i-1][j]*gailv;//前面是他本身的概率!
if(j>0&&j<=k)//1到k有前面比他小1
{
dp[i][j]+=gailv*dp[i-1][j-1];//前面比他小1的概率!
}
if(j>=0&&j<k)//前面比他大1
{
dp[i][j]+=gailv*dp[i-1][j+1];//前面比他大一的概率!
}
}
}
for(i=0;i<=k;i++)
{
sum+=dp[n][i];
}
printf("%.5lf\n",sum*100);
}
}
}
Tight Words(数位DP)
最新推荐文章于 2021-04-12 15:27:34 发布