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
41 25
35 87
Sample Output
100.00000
40.74074
17.38281
0.10130
题目大意:
一串数长度为n,由0~k 的数字组成。且所有相邻两个数字之差的绝对值不大于1。问符合这个要求的数 占所有长度为n的数的百分比。
思路:
还是从最简单的情况,1个数,2个数,3个数开始思考。。。于是定义:长度为i的tight words 有f[i]个。但是发现决定f[i]的因素有第i位本身是多少,,和第i-1位上的数是多少,,,于是就想到定义为二维的状态。f[i][j]表示第i位为j时,长度为i的tight words有多少个。
方程:f[i][j]=f[i-1][j-1]+f[i-1][j]+f[i-1][j+1];
边界条件:f[1][j]=1;(0<=j<=k);
答案:f[n][0-k]的和。
需要注意的是,因为要求得是百分比,如果直接把分母(k+1)^n算出来的话太大了,但是经过计算分子是可以存下的。所以就先用dp算出分子,再用不断的除以k就好了。
但是!!最重要的是精度问题!!!!!
这是第一种输出方法,f[i][j]定义的整数,在计算tot的时候转化为double来除以k
const