Advertisement
mickypinata

PROG-T1038: Bond

Jul 26th, 2021
753
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.82 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int N = 20;
  5.  
  6. int nTask;
  7. double dp[1 << N], tasks[N + 1][N + 1];
  8. bool visited[1 << N];
  9.  
  10. double dpTD(int i, int btw){
  11.     if(i == nTask){
  12.         return 1;
  13.     }
  14.     if(visited[btw]){
  15.         return dp[btw];
  16.     }
  17.     double mx = 0;
  18.     for(int j = 0; j < nTask; ++j){
  19.         if((btw & (1 << j)) == 0){
  20.             mx = max(mx, tasks[i + 1][j + 1] * dpTD(i + 1, (btw | (1 << j))));
  21.         }
  22.     }
  23.     visited[btw] = true;
  24.     return dp[btw] = mx;
  25. }
  26.  
  27. int main(){
  28.  
  29.     scanf("%d", &nTask);
  30.     for(int i = 1; i <= nTask; ++i){
  31.         for(int j = 1; j <= nTask; ++j){
  32.             int percent;
  33.             scanf("%d", &percent);
  34.             tasks[i][j] = (double)percent / 100;
  35.         }
  36.     }
  37.     printf("%.12f", dpTD(0, 0) * 100);
  38.  
  39.     return 0;
  40. }
  41.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement