题解
2025-07-23 21:05:27
发布于:浙江
2阅读
0回复
0点赞
#include <iostream>
#include <vector>
#include <iomanip>
using namespace std;
double maxSuccessRate(vector<vector<double>>& success) {
int n = success.size();
vector<double> dp(1 << n, 0.0);
dp[0] = 1.0;
for (int mask = 0; mask < (1 << n); ++mask) {
int assigned = __builtin_popcount(mask);
for (int task = 0; task < n; ++task) {
if (!(mask & (1 << task))) {
int new_mask = mask | (1 << task);
dp[new_mask] = max(dp[new_mask],
dp[mask] * success[assigned][task] / 100.0);
}
}
}
return dp[(1 << n) - 1] * 100;
}
int main() {
int n;
cin >> n;
vector<vector<double>> success(n, vector<double>(n));
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
cin >> success[i][j];
}
}
cout << fixed << setprecision(6) << maxSuccessRate(success) << endl;
return 0;
}
这里空空如也
有帮助,赞一个