Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int N = 20;
- int nTask;
- double dp[1 << N], tasks[N + 1][N + 1];
- bool visited[1 << N];
- double dpTD(int i, int btw){
- if(i == nTask){
- return 1;
- }
- if(visited[btw]){
- return dp[btw];
- }
- double mx = 0;
- for(int j = 0; j < nTask; ++j){
- if((btw & (1 << j)) == 0){
- mx = max(mx, tasks[i + 1][j + 1] * dpTD(i + 1, (btw | (1 << j))));
- }
- }
- visited[btw] = true;
- return dp[btw] = mx;
- }
- int main(){
- scanf("%d", &nTask);
- for(int i = 1; i <= nTask; ++i){
- for(int j = 1; j <= nTask; ++j){
- int percent;
- scanf("%d", &percent);
- tasks[i][j] = (double)percent / 100;
- }
- }
- printf("%.12f", dpTD(0, 0) * 100);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement