当前位置:软件学习 > Word >>

uva 10081 - Tight Words(dp)

题目大意:给出k和n,表示可以用0~k之间的数值来组成长度为n的数组,然后数组中有一种较为特殊的情况,即任意两个相邻的数值的差不超过1,计算这种特殊的数组占总数的百分比。
 
解题思路:p[i][j]表示说长度为i,且最后一个数字为j的数字占长度为i的数组的百分比。
#include <stdio.h>  
#include <string.h>  
  
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;  
}  

 


补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,