起初是因爲這樣一道題目:n個不同的數組,每個數組取一個數,結果需要不大於M但是又要最大,返回下標值。
規定要用窮舉法解決,我冥思苦想,一開始想到用n個map,這樣key爲值,value爲下標,這樣可以去除重複值。但是要進行n次循環,我卡在如何n個for內嵌循環解決這個問題,一直想不通,最後高人指點,這不就是,遞歸嗎。
我不知道循環次數多大,但是我要遍歷每一個種可能,遞歸可以有約束,當循環到最後一個數組的時候遞歸結束。
還是沒有遞歸的思想。等自己跑通再把完整程序放上來。
void dfs(int now, int a) {
if (a > m)
return;
if (now == n) {
if (ans < a) {
ans = a;
for (int i = 0; i < n; i++)
ans_use[i] = use[i];
ans = a;
}
return;
}
for (int i = 0; i < siz[now]; i++) {
use[now] = i + 1;
dfs(now + 1, a + v[now][i]);
}
}