Advertisement
SuitNdtie

Bond 95

May 15th, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.31 KB | None | 0 0
  1. #include<stdio.h>
  2.  
  3. int n;
  4.  
  5. double value[20][20];
  6.  
  7. double max(double a,double b){
  8.     return (a > b ? a : b);
  9. }
  10.  
  11. /*
  12. double cal(int order,int check){
  13.     if(check == (1<<n)-1){
  14.         return 1;
  15.     }
  16.     double ans = 0;
  17.     for(int i = 0 ; i < n ; i ++){
  18.         if((check & (1<<i)) == 0){ //and use
  19.             ans = max(ans,cal(order+1,(check | (1<<i)))*(value[i][order]/100)    );
  20.         }
  21.     }
  22.     return ans;
  23. }
  24. */
  25. int main()
  26. {
  27. //  for(int i = 0 ; i < 20 ; i ++)for(int j = 0 ; j < (1<<20) ; j ++)dp[i][j] = -1;
  28.     scanf("%d",&n);
  29.     for(int i = 0 ; i < n ; i ++){
  30.         for(int j = 0 ; j < n ; j ++){
  31.             scanf("%lf",&value[i][j]);
  32.         }
  33.     }
  34. //  printf("%lf",100*cal(0,0));
  35.     double dp[2][1<<n];
  36. //  for(int i = 0 ; i < (1<<n) ; i ++)dp[n%2][i] = 1;
  37.    
  38.     for(int order = n-1 ; order >= 0 ; order -- ){
  39.         for(int check = (1<<n)-1 ; check >= 0 ; check --){
  40.             if(check == (1<<n)-1 || order == n){
  41.                 dp[order%2][check] = 1;
  42.                 continue;
  43.             }
  44.             double ans = 0;
  45.             for(int i = 0 ; i < n ; i ++){
  46.                 if((check & (1<<i)) == 0){ //and use
  47.                     double d;
  48.                     if(order+1 == n){
  49.                         d = 1;
  50.                     }
  51.                     else{
  52.                         d = dp[(order+1)%2][(check | (1<<i))];
  53.                     }
  54.                     ans = max(ans,d * (value[i][order]/100));
  55.                 }
  56.             }
  57.         //  printf("%.2lf ",ans);
  58.             dp[order%2][check] = ans;
  59.         }
  60.     //  printf("\n");
  61.     }
  62.    
  63.     printf("%lf",dp[0][0]*100);
  64.     return 0;
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement