체육대회
Lv. 2
Solution
export function trackMeet(abilities: number[][]) {
const studentCnt = abilities.length;
const gameCnt = abilities[0].length;
const dfs = (i: number, totalAbility: number, selected: Set<number>) => {
if (i === gameCnt) {
return totalAbility;
}
let maxAbility = totalAbility;
for (let student = 0; student < studentCnt; student++) {
if (!selected.has(student)) {
selected.add(student);
maxAbility = Math.max(
maxAbility,
dfs(i + 1, totalAbility + abilities[student][i], selected),
);
selected.delete(student);
}
}
return maxAbility;
};
return dfs(0, 0, new Set());
}