Advertisement
Guest User

Untitled

a guest
Jul 25th, 2016
200
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.42 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. #define ff first
  4. #define ss second
  5. #define mp make_pair
  6.  
  7. using namespace std;
  8.  
  9. double dp[10005][10005];
  10. double prob[4][4][4];
  11.  
  12. double f(int a, int b){
  13.     if(a == 1) return 0;
  14.     if(b == 0) return 1;
  15.     if(dp[a][b] != -1) return dp[a][b];
  16.     double ret = 0;
  17.     if(a > 3){
  18.         if(b >= 3)
  19.             ret = (prob[3][3][3]*f(a,b-3) + prob[3][3][2]*f(a-1,b-2) + prob[3][3][1]*f(a-2,b-1) + prob[3][3][0]*f(a-3,b));
  20.         else if(b == 2)
  21.             ret = (prob[3][2][2]*f(a,b-2) + prob[3][2][1]*f(a-1,b-1) + prob[3][2][0]*f(a-2,b));
  22.         else
  23.             ret = (prob[3][1][1]*f(a,b-1) + prob[3][1][0]*f(a-1,b));
  24.     }
  25.     else if(a == 3){
  26.         if(b >= 3)
  27.             ret = (prob[2][3][2]*f(a,b-2) + prob[2][3][1]*f(a-1,b-1) + prob[2][3][0]*f(a-2,b));
  28.         else if(b == 2)
  29.             ret = (prob[2][2][2]*f(a,b-2) + prob[2][2][1]*f(a-1,b-1) + prob[2][2][0]*f(a-2,b));
  30.         else
  31.             ret = (prob[2][1][1]*f(a,b-1) + prob[2][1][0]*f(a-1,b));
  32.     }
  33.     else{
  34.         if(b >= 3)
  35.             ret = (prob[1][3][1]*f(a,b-1) + prob[1][3][0]*f(a-1,b));
  36.         else if(b == 2)
  37.             ret = (prob[1][2][1]*f(a,b-1) + prob[1][2][0]*f(a-1,b));
  38.         else
  39.             ret = (prob[1][1][1]*f(a,b-1) + prob[1][1][0]*f(a-1,b));
  40.     }
  41.     return dp[a][b] = ret;
  42. }
  43.  
  44. int main () {
  45.     int n,m;
  46.  
  47.     prob[1][1][1] = (double)15/36;
  48.     prob[1][1][0] = (double)21/36;
  49.  
  50.     prob[1][2][1] = (double)55/216;
  51.     prob[1][2][0] = (double)161/216;
  52.  
  53.     prob[1][3][1] = (double)225/1296;
  54.     prob[1][3][0] = (double)1071/1296;
  55.  
  56.     prob[2][1][1] = (double)125/216;
  57.     prob[2][1][0] = (double)91/216;
  58.  
  59.     prob[2][2][2] = (double)295/1296;
  60.     prob[2][2][1] = (double)420/1296;
  61.     prob[2][2][0] = (double)581/1296;
  62.  
  63.     prob[2][3][2] = (double)979/7776;
  64.     prob[2][3][1] = (double)1981/7776;
  65.     prob[2][3][0] = (double)4816/7776;
  66.  
  67.     prob[3][1][1] = (double)855/1296;
  68.     prob[3][1][0] = (double)441/1296;
  69.  
  70.     prob[3][2][2] = (double)2890/7776;
  71.     prob[3][2][1] = (double)2611/7776;
  72.     prob[3][2][0] = (double)2275/7776;
  73.  
  74.     prob[3][3][3] = (double)6420/46656;
  75.     prob[3][3][2] = (double)10017/46656;
  76.     prob[3][3][1] = (double)12348/46656;
  77.     prob[3][3][0] = (double)17871/46656;
  78.  
  79.     scanf("%d%d", &n,&m);
  80.  
  81.     for(int i = 0; i <= n; i++)
  82.         for(int j = 0; j <= m; j++) dp[i][j] = -1;
  83.  
  84.    
  85.     printf("%.4lf\n", f(n,m));
  86.     return 0;
  87.    
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement