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
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
/**//*
dp[x][y] 表示以x结尾的长度为y的有多少种
by Xredman
*/
#include <iostream>
#include <cmath>
using namespace std;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
const int N = 105;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
double dp[N][N];
int k, n;
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
int dir[3]=
{-1, 0, 1};
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
double solve()
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
int i, j;
double ans = 0.0;
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
for(i = 0; i <= k; i++)
dp[i][1] = 1.0;
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
for(i = 2; i <= n; i++)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
for(j = 0; j <= k; j++)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
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];
}
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
for(i = 0; i <= k; i++)
ans += dp[i][n];
return ans;
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
}
int main()
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
while(scanf("%d%d", &k, &n) != EOF)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
printf("%.5lf\n", solve() / (pow((double)k + 1, (double) n)) * 100);
}
return 0;
}