标签:
題目:有一個集合{0,1,..,k},問其中元素組成的長為n的串中,相鄰元素差值不超過2的串的數比例。
分析:動態規劃、概率dp。
初始狀態:f(i,1)= 1 /(k+1);
狀態轉移:f(i,j)= sum(f(i-1,t))/ (k+1) { 其中,t為和j相差不超過2的元素 }。
說明:好久沒刷題了╮(╯▽╰)╭。
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
double dp[101][10];
int main()
{
int k, n;
while (cin >> k >> n) {
for (int i = 0; i <= k; ++ i)
dp[1][i] = 1.0/(k+1);
for (int i = 2; i <= n; ++ i)
for (int j = 0; j <= k; ++ j) {
dp[i][j] = 0.0;
for (int t = 0; t <= k; ++ t) {
if (abs(t-j) > 1) continue;
dp[i][j] += dp[i-1][t]/(k+1);
}
}
double sum = 0.0;
for (int i = 0; i <= k; ++ i)
sum += dp[n][i];
printf("%.5lf\n",100.0*sum);
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/mobius_strip/article/details/47315509