UVa 10081 - Tight Words

来源:互联网 发布:淘宝单机游戏店铺赚钱 编辑:程序博客网 时间:2024/06/08 19:37

題目:有一個集合{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;}


0 0
原创粉丝点击