μΈνμ μν λ¬Έμ λ λΉνΈλ§μ€ν¬ + DP λ₯Ό μ΄μ©ν λ¬Έμ μ΄λ€. νμ΄ λ° μ½λλ₯Ό μ΄ν΄ν ν, μΈμ°λ κ²μ΄ μ’μ κ² κ°λ€.
int TSP(int mask, int now) {
if (mask == (1<<N)-1) {
if (W[now][0] > 0) return W[now][0];
return INF;
}
if (dp[mask][now] != INF) return dp[mask][now];
for (int i = 0; i < N; i++) {
if ((mask & 1<<i) == 0 && W[now][i] > 0) {
dp[mask][now] = Math.min(dp[mask][now], TSP(mask|1<<i, i) + W[now][i]);
}
}
return dp[mask][now];
}