Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define f first
- #define s second
- #define mp make_pair
- #define pb push_back
- #define loop(i,a,n) for(int i=a;i<=n;i++)
- #define mod 1000000007
- #define eps 1e-9
- using namespace std;
- typedef long long ll;
- typedef pair<int, int> pii;
- typedef vector<int> vi;
- typedef set<int> si;
- typedef map<int, int> mii;
- int n,x;
- float dp[19][265000],probs[19][19],ans;
- bool vis[19][265000];
- float solve(int fr, int mask){
- if(mask == ((1<<(n))-2)) return probs[1][fr];
- if(vis[fr][mask]) return dp[fr][mask];
- vis[fr][mask] = true;
- float first = 0, second = 0;
- float ans = 0 ;
- loop(i,1,n-1){
- if(!(mask&(1<<i))){
- first = probs[fr][i+1]*solve(fr, mask|(1<<i));
- second = probs[i+1][fr]*solve(i+1, mask|(1<<i));
- ans = max(ans , first + second) ;
- }
- }
- return dp[fr][mask] = ans;
- }
- int main(){
- cin >>n;
- loop(i,1,n){
- loop(j,1,n){
- cin >>probs[i][j];
- }
- }
- if(n == 1){
- cout <<1;
- return 0;
- }
- loop(i,2,n){
- x = 0;
- x|=(1<<(i-1));
- ans = max(ans, solve(i, x));
- }
- printf("%.6f", ans);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement