AcWing P279 自然數拆分(DP)

2021-10-19 14:18:02 字數 967 閱讀 5399

給定乙個自然數n,要求把n拆分成若干個正整數相加的形式,參與加法運算的數可以重複。

注意:

拆分方案不考慮順序;

至少拆分成2個數的和。

求拆分的方案數 mod 2147483648的結果。

輸入格式:

乙個自然數n。

輸出格式:

輸入乙個整數,表示結果。

資料範圍和約定:

1≤n≤4000

輸入樣例:

7輸出樣例:

14

題中「使用的數可以重複」這裡暴露了完全揹包的本性(知己知彼,百戰不殆),我們可以將n看作揹包容量,且一共有n - 1(最小拆成兩個數,不包括自身)件物品。f[i]為揹包容量為i時所能拆出來的最大方案數。ok!既然看出來了是什麼模型,寫**就心中有數了。

#include

#include

#define ll long long

#define ull unsigned long long

#define inf 0x3f3f3f3f

using

namespace std;

const ll mod =

2147483648ll

;//巨集定義一下

ll n,f[

6001];

//不開long long見祖宗

intmain()

}printf

("%lld\n"

,f[n]);

//帶入定義:揹包容量為n時的方案總數,恰為題目所求

return0;

}

感謝你的閱讀,希望這篇部落格能幫到你。

AcWing 279 自然數拆分

原題鏈結 考察 完全揹包dp 思路 n可以看成體積為n,從1 n 1的數選的揹包.因為f i j 代表從前i個數選,體積恰好為j的方案數.感覺我 重新整理前後是一模一樣的,重新整理前是輸出錯誤答案,重新整理後又對了 1 include 2 include 3 include 4 using name...

題解 AcWing279 自然數拆分

題面 因為題目中說參與加法運算的數可以重複,由此可以想到完全揹包計數問題。完全揹包計數問題與 01 揹包計數問題只有乙個不同 01 揹包計數問題的第二維迴圈是倒敘迴圈,而完全揹包計數問題的第二維迴圈是正序迴圈。這涉及到的是迴圈時後效性的問題,具體的證明留給讀者思考。注意每一步計數都要取模,且最後輸出...

自然數拆分

描述 description 輸入自然數n,然後將其拆分成由若干數相加的形式,參與加法運算的數可以重複。輸入格式 inputformat 輸入只有乙個整數n,表示待拆分的自然數n。n 80 輸出格式 outputformat 輸出乙個數,即所有方案數 樣例輸入 sampleinput 複製資料 7 ...