清華大學機試 整數拆分 需要二刷 完全揹包問題

2022-06-24 18:15:09 字數 794 閱讀 1742

基本思想:

第一次見到完全揹包問題,並且這個揹包問題所描述的並非整體最大值的問題,而是放置次數的問題;

很多案例沒有講出為神馬要這麼遍歷dp陣列,這裡說一下:

1.首先,對於n個放置元素的確定,採用打表進行;

2.dp[0]=1,是為了邊界初始化,來保證dp[1]當放置元素為1時,可以正常進行初始化,值得注意的是,dp陣列內放的是當前值的方案個數;

3.對於dp陣列初始化,可以直接從1-n進行放置元素舉例,但是不同於尋常的放置元素的轉換方程,求放與不放的最大值;

而是dp[j]=dp[j]+dp[j-n];

原因在於,當我們決定要放n種元素的時候,就要去尋找之前n佔位時,剩餘容量能放多少種,也就是dp[j-n]。而由於當我們在列舉第n種元素前,就已經研究過1-n-1種元素在當前容量有放置有幾種方案,所以要再加上dp[j];

關鍵點:

後續在刷題吧,第一次見到這種dp內儲存方案數目的dp陣列;

01揹包問題中也僅僅是直接記錄放置情況;

#include #include #include #include #include #include #include #include #include #include #include //rand ( ), srand ( )

#include //time ( )

using namespace std;

int n, dp[1000002], a[21];

int main ( )

}cout << dp[n] << endl;

}return 0;

}

清華機試 整數拆分

題目描述 乙個整數總可以拆分為2的冪的和,例如 7 1 2 4 7 1 2 2 2 7 1 1 1 4 7 1 1 1 2 2 7 1 1 1 1 1 2 7 1 1 1 1 1 1 1 總共有六種不同的拆分方式。再比如 4可以拆分成 4 4,4 1 1 1 1,4 2 2,4 1 1 2。用f n...

清華大學機試 需要二刷 貪心演算法,比較虎人

基本思想 想到貪心,但是覺得時間複雜度太高,結果一不小心寫出來個更複雜的貪心 關鍵點 注意特殊用例,有可能無法遍歷出正確結果,即沒有切換得到正確的值,此時要避免進入死迴圈 include include include include include include using namespace ...

清華大學2023年機試 遞推數列 1081

題目描述 給定a0,a1,以及an p a n 1 q a n 2 中的p,q。這裡n 2。求第k個數對10000的模。輸入 輸入包括5個整數 a0 a1 p q k。輸出 第k個數a k 對10000的模。樣例輸入 20 1 1 14 5 樣例輸出 8359 解題思路 首先,第一反應是用遞迴解題,...