Advertisement
Guest User

Untitled

a guest
Sep 21st, 2017
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.24 KB | None | 0 0
  1. public class ChipRace {
  2.  
  3.     int[] a;
  4.     int t, d;
  5.     double[] best;
  6.  
  7.     double dp(int mask) {
  8.  
  9.         if (((1 << t) & mask) > 0)
  10.             return 1;
  11.  
  12.         if (Integer.bitCount(mask) == d)
  13.             return 0;
  14.  
  15.         if (best[mask] != -1)
  16.             return best[mask];
  17.  
  18.         double p = 0.0;
  19.         int sum = 0;
  20.  
  21.         for (int j = 0; j < a.length; j++) {
  22.             if (((1 << j) & mask) == 0)
  23.                 sum += a[j];
  24.         }
  25.         for (int j = 0; j < a.length; j++) {
  26.             if (((1 << j) & mask) == 0) {
  27.                 p += a[j] * dp(mask | (1 << j)) / sum;
  28.             }
  29.         }
  30.         return best[mask] = p;
  31.  
  32.     }
  33.  
  34.     void init() {
  35.         best = new double[1 << a.length];
  36.         for (int i = 0; i < best.length; i++) {
  37.             best[i] = -1;
  38.         }
  39.     }
  40.  
  41.     public double[] chances(int[] chips) {
  42.         a = chips;
  43.         int sum = 0;
  44.         for (int i = 0; i < chips.length; i++) {
  45.             sum += chips[i];
  46.         }
  47.         d = Math.round(sum / (float) 5);
  48.         init();
  49.         double[] ret = new double[chips.length];
  50.  
  51.         for (int i = 0; i < ret.length; i++) {
  52.             init();
  53.             t = i;
  54.             ret[i] = dp(0);
  55.         }
  56.         return ret;
  57.     }
  58.  
  59.     public static void main(String[] args) {
  60.         double[] r = new ChipRace().chances(new int[] { 0, 1, 2, 3, 4 });
  61.         System.out.println(r[0]);
  62.         System.out.println(r[1]);
  63.         System.out.println(r[2]);
  64.         System.out.println(r[3]);
  65.         System.out.println(r[4]);
  66.     }
  67.  
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement