Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #include <stdio.h>
- #include <stdlib.h>
- /// Defines
- #define all(a) a.begin(),a.end()
- #define ios std::ios::sync_with_stdio(false);
- /// STL
- #define vi vector<int>
- #define vvi vector< vector<int> >
- #define pb push_back
- #define mp make_pair
- #define mii map<int,int>
- #define pii pair<int,int>
- /// Iterator
- #define forit(it, s) for(__typeof(s.begin()) it = s.begin(); it != s.end(); it++)
- /// Constants
- #define ll long long
- #define mod 1000000007
- #define EPS 1e-7
- #define INF 2000000007
- #define LINF 9000000000000000007
- /// File I/O
- #define READ(f) freopen(f, "r", stdin)
- #define WRITE(f) freopen(f, "w", stdout)
- using namespace std;
- int n;
- float matrix[20][20], dp[20][1 << 18];
- bool checked[20][1 << 18];
- float solve(int index, int mask);
- int main()
- {
- cin >> n;
- for (int i = 0; i < n; i++)
- {
- for (int j = 0; j < n; j++)
- cin >> matrix[i][j];
- }
- memset(dp, -1, sizeof(dp));
- float ans = 0;
- for (int i = 0; i < n; i++)
- {
- ans = max(ans, solve(i, (1 << i)));
- }
- cout << fixed << setprecision(6) << ans << endl;
- /// That's all folks.
- return 0;
- }
- float solve(int index, int mask)
- {
- if (mask == (1 << n) - 1)
- {
- if (index == 0)
- return 1;
- else
- return 0;
- }
- if (checked[index][mask])
- return dp[index][mask];
- float sum = 0;
- for (int i = 0; i < n; i++)
- {
- if ((mask & (1 << i)) == 0)
- {
- sum = matrix[index][i] * solve(index, mask | (1 << i));
- sum += matrix[i][index] * solve(i, mask | (1 << i));
- }
- }
- checked[index][mask] = true;
- return dp[index][mask] = sum;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement