遞歸算法初探

起初是因爲這樣一道題目: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]);
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章