ZOJ1883(Tight Words)

Tight Words

Time Limit: 1 Second      Memory Limit: 32768 KB

Given is an alphabet {0, 1, ... , k}, 0 <= k <= 9 . We say that a word of length n over this alphabet is tight if any two neighbour digits in the word do not differ by more than 1.


Input

Input is a sequence of lines, each line contains two integer numbers k and n, 1 <= n <= 100.


Output

For each line of input, output the percentage of tight words of length n over the alphabet {0, 1, ... , k} with 5 fractional digits.


Sample Input

4 1
2 5
3 5
8 7


Sample Output

100.00000
40.74074
17.38281
0.10130

/*
    dp[x][y] 表示以x结尾的长度为y的有多少种
        by Xredman
*/

#include 
<iostream>
#include 
<cmath>
using namespace std;

const int N = 105;

double dp[N][N];
int k, n;
int dir[3]= {-101};

double solve()
{
    
int i, j;
    
double ans = 0.0;

    
for(i = 0; i <= k; i++)
        dp[i][
1= 1.0;

    
for(i = 2; i <= n; i++)
    
{
        
for(j = 0; j <= k; j++)
        
{    
            dp[j][i] 
= dp[j][i - 1];
            
if(j - 1 >= 0)
                dp[j][i] 
+= dp[j - 1][i - 1];
            
if(j + 1 <= k)
                dp[j][i] 
+= dp[j + 1][i - 1];
        }

    }


    
for(i = 0; i <= k; i++)
        ans 
+= dp[i][n];
    
return ans;

}

int main()
{

    
while(scanf("%d%d"&k, &n) != EOF)
    
{
        printf(
"%.5lf\n", solve() / (pow((double)k + 1, (double) n)) * 100);
    }

    
return 0;
}

posted on 2009-05-08 18:01  Xredman  阅读(352)  评论(0编辑  收藏  举报

导航