2012-06-13 21:46:00Morris

[UVA][DP] 10081 - Tight Words

Problem B: Tight words

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 is a sequence of lines, each line contains two integer numbers k and n, 1 <= n <= 100. 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

Output for the sample input

100.00000
40.74074
17.38281
0.10130


#include <stdio.h>

int main() {
int k, n;
while(scanf("%d %d", &k, &n) == 2) {
double dp[101][10] = {};
int i, j, l;
for(i = 0; i <= k; i++)
dp[1][i] = (double)100/(k+1);
for(i = 1; i < n; i++) {
for(j = 0; j <= k; j++) {
for(l = -1; l <= 1; l++) {
if(j+l >= 0 && j+l <= k) {
dp[i+1][j+l] += dp[i][j]/(k+1);
}
}
}
}
double ans = 0;
for(i = 0; i <= k; i++)
ans += dp[n][i];
printf("%.5lf\n", ans);
}
return 0;
}