DP,不要被结果很大吓到,开始我还想这题要用大数什么的,后来发现题目根本没要求给出组合的精确结果,而是求一个比例,那么double足诶,先把tight数用double DP出来,然后除以总数(K+1)^N,总数也不用求,循环N次每次除以K+1就行
#include<stdio.h>
int main()
{
int i, j, n, k;
double dp[101][10];
while (scanf("%d %d", &k, &n) != EOF)
{
for (i = 0; i <= k; i++)
dp[1][i] = 1.0;
for (i = 2; i <= n; i++)
for (j = 0; j <= k; j++)
{
if (j == 0)
dp[i][j] = dp[i - 1][j] + dp[i - 1][j + 1];
else if (j == k)
dp[i][j] = dp[i - 1][j] + dp[i - 1][j - 1];
else
dp[i][j] = dp[i - 1][j] + dp[i - 1][j - 1]
+ dp[i - 1][j + 1];
}
double sum = 0, kk = k + 1;
for (i = 0; i <= k; i++)
sum += dp[n][i];
for (i = 0; i < n; i++)
sum /= kk;
printf("%.5lf\n", sum * 100);
}
return 0;
}