标签:des style blog color io os ar java for
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 1487 Accepted Submission(s): 304
5 5 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 5 5 0.000 0.000 0.000 0.000 0.000 1.000 1.000 0.000 0.000 0.000 0.000 0.000
0.000000 1.000000
求概率,和求期望的方法相同,不过不用再+1,dp[i][j]表示a有i血量,b有j血量时a赢的概率,因为要求a赢的概率,所以在dp[i][0]a赢得概率是1,dp[0][j]时a赢的概率是0。
一个坑点,血量是倒着输入的。。。。坑了一天。。。
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; int hp1 , hp2 ; double dp[2][2100] ; double a , b , p ; double ka[10] , kb[10] ; int main() { int i , j , flag ; while(scanf("%d %d", &hp2, &hp1)!=EOF) { for(i = 1 ; i <= 6 ; i++) scanf("%lf", &ka[i]); for(j = 1 ; j <= 6 ; j++) scanf("%lf", &kb[j]); memset(dp,0,sizeof(dp)); a = b = p = 0.0 ; for(i = 1 ; i <= 6 ; i++) for(j = 1 ; j <= 6 ; j++) { if(i > j) a += ka[i]*kb[j] ; else if( i < j ) b += ka[i]*kb[j] ; else p += ka[i]*kb[j] ; } dp[0][0] = dp[1][0] = 1.0 ; flag = 0 ; for(i = 1 ; i <= hp1 ; i++) { flag = 1 - flag ; for(j = 0 ; j <= hp2 ; j++) { if( j == 0 ) continue ; dp[flag][j] = ( a*dp[flag][j-1] + b*dp[1-flag][j] ) / (1.0-p) ; } } printf("%.6lf\n", dp[flag][hp2]); } return 0; }
hdu3076--ssworld VS DDD(概率dp第三弹,求概率)
标签:des style blog color io os ar java for
原文地址:http://blog.csdn.net/winddreams/article/details/40391277