給定乙個自然數n,要求把n拆分成若干個正整數相加的形式,參與加法運算的數可以重複。
注意:拆分方案不考慮順序;
至少拆分成2個數的和。
求拆分的方案數 mod 2147483648的結果。
輸入格式:乙個自然數n。
輸出格式:
輸入乙個整數,表示結果。
資料範圍和約定:1≤n≤4000
輸入樣例:題中「使用的數可以重複」這裡暴露了完全揹包的本性(知己知彼,百戰不殆),我們可以將n看作揹包容量,且一共有n - 1(最小拆成兩個數,不包括自身)件物品。f[i]為揹包容量為i時所能拆出來的最大方案數。ok!既然看出來了是什麼模型,寫**就心中有數了。7輸出樣例:
14
#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 ...