首页 > 代码库 > HDU 3076 ssworld VS DDD (概率DP)
HDU 3076 ssworld VS DDD (概率DP)
感觉思路没错,实在没找到哪里出错了。求大神赐教。
代码如下:
#include <iostream> #include <string.h> #include <math.h> #include <queue> #include <algorithm> #include <stdlib.h> #include <map> #include <set> #include <stdio.h> using namespace std; #define LL __int64 #define pi acos(-1.0) const int mod=100000000; const int INF=0x3f3f3f3f; const double eqs=1e-8; double dp[2001][2001]; int main() { int hp1, hp2, i, j; double a[8], b[8], w1, w2, tmp, p; while(scanf("%d%d",&hp1,&hp2)!=EOF) { for(i=0; i<6; i++) { scanf("%lf",&a[i]); } for(i=0; i<6; i++) { scanf("%lf",&b[i]); } w1=w2=0; for(i=1; i<6; i++) { for(j=0; j<i; j++) { w1+=a[i]*b[j]; w2+=b[i]*a[j]; } } p=w1+w2; if(p) { w1/=p; w2/=p; } for(i=hp1; i>0; i--) { for(j=hp2; j>=0; j--) { if(i==hp1&&j==hp2) { dp[i][j]=1; } else if(i==hp1) { dp[i][j]=dp[i][j+1]*w1; } else if(j==hp2) { dp[i][j]=dp[i+1][j]*w2; } else if(!j) { dp[i][j]=dp[i][j+1]*w1; } else { dp[i][j]=dp[i+1][j]*w2+dp[i][j+1]*w1; } } } double ans=0; for(i=1; i<=hp1; i++) { ans+=dp[i][0]; } printf("%.6f\n",ans); } return 0; }
HDU 3076 ssworld VS DDD (概率DP)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。