最大スコアを取得(バイナリツリーDFS)


今度の情報オリンピックで良い成績を取るために、賢洙は先生からもらったN題をやりたいと思っています.どの問題にも、解答にかかる点数と解答にかかる時間があります.制限時間M内では、N個の問題において最大スコアを得る必要がある.(問題に時間がかかる場合は、問題の解決とみなされます.タイプごとに1つの問題しか解決できません)

▼▼入力説明


第1行は、問題の数N(1<=N<=20)およびタイムアウトM(10<=M<=300)を与える.
2行目からN行で問題を解くと、点数と問題を解くのにかかる時間が得られます.

▼▼出力説明


最初の行では、有限時間で得られる最大スコアを出力します.

▼▼入力例1


5 20
10 5
25 12
15 8
6 3
7 4

▼▼出力例1


41
const input = fs.toString().split('\n');
const testCase = input.shift().toString().split(' ').map((v) => +v);
console.log(testCase)
const [num, maxTime] = testCase;
const arr = input.map((v) => v.split(' ').map((v) => +v));

const solution = (arr) => {
  let answer = Number.MIN_SAFE_INTEGER;
  
  
  const n = arr.length;
  
  const DFS = (L, sum, time) => { 
    if (time > maxTime) return; // 시간이 넘으면 return
    if(L === n) {
      answer = Math.max(answer, sum); // answer 값 갱신
    } else {
      DFS(L + 1, sum + arr[L][0], time + arr[L][1]);
      DFS(L + 1, sum, time);
    }
  }
  
  DFS(0, 0, 0);
  return answer;
  
}

console.log(solution(arr));