SRM339 div1 medium

”DP[何ラウンド目][前に何ドルかけた(※)][今何ドル持っている]=確率”でDP。
※2の指数、前に勝った場合は10とした。

#include <cmath>

class TestBettingStrategy
{
	public:

		double DP[55][11][2010];

		double winProbability(int initSum, int goalSum, int rounds, int _prob)
		{
			for(int i=0;i<55;i++)
				for(int j=0;j<11;j++)
					for(int k=0;k<2010;k++)
						DP[i][j][k]=0.0;

			double prob=(double)_prob/100.0,ans=0.0;
			DP[0][10][initSum]=1.0;

			for(int r=0;r<=rounds;r++)
				for(int b=0;b<11;b++)
					for(int now=0;now<2010;now++)
						if(goalSum<=now)
							ans+=DP[r][b][now],DP[r][b][now]=0.0;
						else if(r!=rounds)
						{
							int bet=(b==10)?1:pow(2,(b+1));
							if(bet<=now)
							{
								DP[r+1][10][now+bet]+=DP[r][b][now]*prob;
								DP[r+1][(b==10)?0:b+1][now-bet]+=DP[r][b][now]*(1.0-prob);
							}
						}

			return ans;
		}
};