Advertisement
Guest User

Untitled

a guest
Jun 29th, 2016
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.73 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. /// Defines
  6. #define all(a) a.begin(),a.end()
  7. #define ios std::ios::sync_with_stdio(false);
  8.  
  9. /// STL
  10. #define vi vector<int>
  11. #define vvi vector< vector<int> >
  12. #define pb push_back
  13. #define mp make_pair
  14. #define mii map<int,int>
  15. #define pii pair<int,int>
  16.  
  17. /// Iterator
  18. #define forit(it, s) for(__typeof(s.begin()) it = s.begin(); it != s.end(); it++)
  19.  
  20. /// Constants
  21. #define ll long long
  22. #define mod 1000000007
  23. #define EPS 1e-7
  24. #define INF 2000000007
  25. #define LINF 9000000000000000007
  26.  
  27. /// File I/O
  28. #define READ(f) freopen(f, "r", stdin)
  29. #define WRITE(f) freopen(f, "w", stdout)
  30.  
  31. using namespace std;
  32.  
  33. int n;
  34. float matrix[20][20], dp[20][1 << 18];
  35. bool checked[20][1 << 18];
  36.  
  37. float solve(int index, int mask);
  38.  
  39. int main()
  40. {
  41.     cin >> n;
  42.     for (int i = 0; i < n; i++)
  43.     {
  44.         for (int j = 0; j < n; j++)
  45.             cin >> matrix[i][j];
  46.     }
  47.     memset(dp, -1, sizeof(dp));
  48.     float ans = 0;
  49.     for (int i = 0; i < n; i++)
  50.     {
  51.         ans = max(ans, solve(i, (1 << i)));
  52.     }
  53.     cout << fixed << setprecision(6) << ans << endl;
  54.  
  55.     /// That's all folks.
  56.     return 0;
  57. }
  58.  
  59. float solve(int index, int mask)
  60. {
  61.     if (mask == (1 << n) - 1)
  62.     {
  63.         if (index == 0)
  64.             return 1;
  65.         else
  66.             return 0;
  67.     }
  68.  
  69.     if (checked[index][mask])
  70.         return dp[index][mask];
  71.  
  72.     float sum = 0;
  73.     for (int i = 0; i < n; i++)
  74.     {
  75.         if ((mask & (1 << i)) == 0)
  76.         {
  77.             sum = matrix[index][i] * solve(index, mask | (1 << i));
  78.             sum += matrix[i][index] * solve(i, mask | (1 << i));
  79.         }
  80.     }
  81.     checked[index][mask] = true;
  82.     return dp[index][mask] = sum;
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement