SRM408 div2 hard
久しぶりに1発で通した。
4000*4000のメモリーは確保できないのでうまいこと節約しませう。
#include <algorithm> using namespace std; class MarblesInABag { public: double DP[2][4000+1]; double getProbability(int redCount, int blueCount) { for(int R=0;R<=redCount;R++) for(int B=0;B<=blueCount;B++) { if((R+B)%2==0) continue; if(R==0) DP[R%2][B]=1.0; else if(B==0) DP[R%2][B]=0.0; else if(B==1) DP[R%2][B]=0.0; else DP[R%2][B]=(double)R/(double)(R+B)*DP[(R-1+2)%2][B-1]+(double)B/(double)(R+B)*DP[R%2][B-2]; if(R==redCount && B==blueCount) return DP[R%2][B]; } return -1.0; } };