uva 10081 - Tight Words(dp)

2014-11-24 01:35:56 · 作者: · 浏览: 1
题目大意:给出k和n,表示可以用0~k之间的数值来组成长度为n的数组,然后数组中有一种较为特殊的情况,即任意两个相邻的数值的差不超过1,计算这种特殊的数组占总数的百分比。
解题思路:p[i][j]表示说长度为i,且最后一个数字为j的数字占长度为i的数组的百分比。
#include   
#include   
  
int n, k;  
double p[105][15];  
  
void solve() {  
    memset(p, 0, sizeof(p));  
    for (int i = 0; i <= k; i++)  
        p[1][i] = 1.0 / (k + 1);  
    for (int i = 2; i <= n; i++) {  
        for (int j = 0; j <= k; j++) {  
            p[i][j] = p[i - 1][j];  
            if (j) p[i][j] += p[i - 1][j - 1];  
            if (j != k) p[i][j] += p[i - 1][j + 1];  
            p[i][j] /= (k + 1);  
        }  
    }  
}  
  
int main () {  
    while (scanf("%d%d", &k, &n) == 2) {  
        solve();  
        double ans = 0;  
        for (int i = 0; i <= k; i++)  
            ans += p[n][i];  
        printf("%.5lf\n", ans * 100);  
    }  
    return 0;  
}