class Solution {
int[][] g;
int res = 0;
int n;
public int maxCompatibilitySum(int[][] students, int[][] mentors) {
g = new int[students.length][students.length];
n = students.length;
//前缀树的思路不对,用暴力
//预先把每一种匹配都记录下来(预先处理,可以减少时间复杂度)
for (int i = 0; i < students.length; i++) {
for (int j = 0; j < mentors.length; j++) {
for (int k = 0; k < students[i].length; k++) {
if (students[i][k] == mentors[j][k]) {
g[i][j]++; //表示学生i 和导师j的匹配度
}
}
}
}
//然后对学生的顺序进行全排列,得出最大值
dfs(0);
return res;
}
int nums[] = new int[10];//记录顺序
boolean[] used = new boolean[10];//防止重复
public void dfs(int index){
if (index == n){
//排列完,计算所有的匹配度
int temp = 0;
for (int i = 0; i < n; i++) {
temp += g[nums[i]][i];
}
res = Math.max(temp,res);
return;
}
//排列
for (int i = 0; i < n; i++) {
if (!used[i]) {
nums[index] = i;
used[i] = true;
dfs(index + 1);
nums[index] = 0;
used[i] = false;
}
}
}
}
leetcode 07-25周赛第三题review
最新推荐文章于 2024-09-27 15:00:48 发布