10081 - Tight Words
Time limit: 3.000 seconds
思路:长度为i的串,如果其末尾数是j,那么这样的串的个数必为长为i-1的串的,尾数为j-1,j,j+1三种情况的数目之和(在边界范围内)
完整代码:
/*0.019s*/
#include<bits/stdc++.h>
using namespace std;
double dp[111][11];
int main()
{
int k, n, i, j;
double ans;
while (~scanf("%d%d", &k, &n))
{
for (i = 0; i <= k; ++i) dp[1][i] = 1.0 / (k + 1);
for (i = 2; i <= n; ++i)
for (j = 0; j <= k; ++j)
{
dp[i][j] = dp[i - 1][j] / (k + 1);
if (j > 0) dp[i][j] += dp[i - 1][j - 1] / (k + 1);
if (j < k) dp[i][j] += dp[i - 1][j + 1] / (k + 1);
}
ans = 0;
for (i = 0; i <= k; i++) ans += dp[n][i];
printf("%.5f\n", ans * 100);
}
return 0;
}