minimario

SRM 318 Div 2. Hard

Jun 4th, 2015
264
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.72 KB | None | 0 0
  1. class SimplifiedDarts():
  2.     dp = [[-1]*3005 for _ in range(1005)]
  3.  
  4.     def tryToWin(self, w, n, p1, p2):
  5.            
  6.         p1 /= 100.0
  7.         p2 /= 100.0
  8.         return 100*self.calc(n, 0, w,  p1, p2)
  9.  
  10.     def calc(self, i, j, w, p1, p2):
  11.         if self.dp[i][j] != -1:
  12.             return self.dp[i][j]
  13.         if i == 0:
  14.             if j >= w:
  15.                 self.dp[i][j] = 1
  16.             else:
  17.                 self.dp[i][j] = 0
  18.         elif j > w:
  19.             self.dp[i][j] = 1
  20.  
  21.         else:
  22.             self.dp[i][j] = max(self.calc(i-1, j+3, w, p1, p2)*p2+self.calc(i-1, j, w, p1,p2) * (1-p2), self.calc(i-1, j+2, w, p1, p2)*p1 + self.calc(i-1, j, w, p1, p2) * (1-p1))
  23.  
  24.         return self.dp[i][j]
Advertisement
Add Comment
Please, Sign In to add comment