poj 2537 动态规划

题目描述:

一段文章仅由0 ~k   k + 1个数字组成,要求相邻两个数字的差值不能大于1.

问文章长度n时,合法的文章占所有文章的百分比。

解题报告:

dp[i][j] = dp[i - 1][j] + dp[i - 1][j + 1] + dp[i - 1][j - 1];

dp[i][j]表示文章第i个数字是j时的情况种数。

那么第i位的数字种数的和sum,再除以所有种数(k+1)^n就是答案。

代码:

#include<iostream>
#include<fstream>
#include<cmath>

using namespace std;

double dp[20][200];

void read(){
//    ifstream cin("in.txt");
    int i,j,k;
    int n,m;
    while(cin>>n>>m){
        memset(dp,0,sizeof(dp));
        n++;
        for(i=1;i<=n;i++)
            dp[i][1]=1;
        for(i=2;i<=m;i++)
            for(j=1;j<=n;j++)
                dp[j][i]=dp[j][i-1]+dp[j-1][i-1]+dp[j+1][i-1];
        double sum=0;
        for(i=1;i<=n;i++)
            sum+=dp[i][m];
        printf("%.5lf\n",100*sum/pow(1.*n,1.*m));
    }

}

posted on 2011-02-23 10:35  宇宙吾心  阅读(214)  评论(0)    收藏  举报

导航