BOJ 3056 : 007

2020. 8. 13. 15:56PS/DP

https://www.acmicpc.net/problem/3056

모든 경우의 수를 찾는데 백트래킹으로 하면 시간 많이 걸리니 Bit DP를 돌리자(?).

계산 조심하면 AC.

#include <bits/stdc++.h>
#define MEM 20
#define sanic ios_base::sync_with_stdio(0)
#define pb push_back
using namespace std;
typedef long long ll;
typedef pair<ll, ll> pii;
const ll INF = 1e9+7;
ll n,ans;
double mp[MEM][MEM];
double dp[1<<MEM];
double deepee(int c, int b){
    if(c==n) return 1;
    double &ret=dp[b];
    if(ret!=0.0) return ret;
    for(int i=0; i<n; i++){
        if(!(b&(1<<i)))
            ret = max(ret, deepee(c+1, b|(1<<i))*(mp[c][i]));
    }
    return ret;
}
int main()
{
    sanic; cin.tie(0);
    cin >> n;
    for(int i=0; i<n; i++)
        for(int j=0; j<n; j++){
            cin >> mp[i][j];
            mp[i][j]/=100.0;
        }
    cout.precision(6);
    cout << fixed << deepee(0,0)*100.0;
}

'PS > DP' 카테고리의 다른 글

BOJ 14728 : 벼락치기  (0) 2021.01.10
BOJ 2688 : 줄어들지 않아  (0) 2020.08.17
BOJ 17623 : 괄호  (0) 2020.08.17
BOJ 2240 : 자두나무  (0) 2020.06.01
BOJ 18244 : 변형 계단 수  (0) 2020.05.29