Advertisement
Guest User

Untitled

a guest
Jun 26th, 2016
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.22 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define f first
  3. #define s second
  4. #define mp make_pair
  5. #define pb push_back
  6. #define loop(i,a,n) for(int i=a;i<=n;i++)
  7. #define mod 1000000007
  8. #define eps 1e-9
  9. using namespace std;
  10. typedef long long ll;
  11. typedef pair<int, int> pii;
  12. typedef vector<int> vi;
  13. typedef set<int> si;
  14. typedef map<int, int> mii;
  15.  
  16. int n,x;
  17. float dp[19][265000],probs[19][19],ans;
  18. bool vis[19][265000];
  19.  
  20. float solve(int fr, int mask){
  21. if(mask == ((1<<(n))-2)) return probs[1][fr];
  22. if(vis[fr][mask]) return dp[fr][mask];
  23.  
  24. vis[fr][mask] = true;
  25. float first = 0, second = 0;
  26. float ans = 0 ;
  27. loop(i,1,n-1){
  28. if(!(mask&(1<<i))){
  29. first = probs[fr][i+1]*solve(fr, mask|(1<<i));
  30. second = probs[i+1][fr]*solve(i+1, mask|(1<<i));
  31. ans = max(ans , first + second) ;
  32. }
  33. }
  34.  
  35. return dp[fr][mask] = ans;
  36. }
  37.  
  38. int main(){
  39. cin >>n;
  40. loop(i,1,n){
  41. loop(j,1,n){
  42. cin >>probs[i][j];
  43. }
  44. }
  45. if(n == 1){
  46. cout <<1;
  47. return 0;
  48. }
  49. loop(i,2,n){
  50. x = 0;
  51. x|=(1<<(i-1));
  52. ans = max(ans, solve(i, x));
  53. }
  54.  
  55. printf("%.6f", ans);
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement