基本思想:
第一次見到完全揹包問題,並且這個揹包問題所描述的並非整體最大值的問題,而是放置次數的問題;
很多案例沒有講出為神馬要這麼遍歷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 解題思路 首先,第一反應是用遞迴解題,...