#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
// 题目链接: http://acm.fzu.edu.cn/problem.php?pid=1342
/*
这是一道简单的概率DP:
dp[i][j] : 代表长度为i,且最后一个单词为j的情况下,满足约束条件的概率
dp[i][j] = (dp[i-1][j-1] + dp[i-1][j] + dp[i-1][j+1]) / (k + 1)
*/
const int maxn = 110;
double dp[maxn][20];
int main() {
int k, n;
while(scanf("%d %d", &k, &n) != EOF) {
for(int i = 0; i <= k; ++i) {
dp[1][i] = 1.0 * 100 / (k + 1);
}
for(int i = 2; i <= n; ++i) {
dp[i][0] = (dp[i-1][0] + dp[i-1][1]) / (k+1);
dp[i][k] = (dp[i-1][k-1] + dp[i-1][k]) / (k+1);
for(int j = 1; j < k; ++j) {
dp[i][j] = (dp[i-1][j-1] + dp[i-1][j] + dp[i-1][j+1]) / (k+1);
}
}
double ans = 0.0;
for(int i = 0; i <= k; ++i) {
ans += dp[n][i];
}
printf("%.5lf\n", ans);
}
return 0;
}
FOJ 1342 Tight Words
最新推荐文章于 2017-04-15 20:31:15 发布