51nod 1201 整數劃分

2021-07-25 12:35:16 字數 577 閱讀 1965

將n分為若干個不同整數的和,有多少種不同的劃分方式,例如:n = 6, ,共4種。由於資料較大,輸出mod 10^9 + 7的結果即可。(1 <= n <= 50000)

直接一看就想到是一道最簡單揹包問題

但n<=50000!!!

然後我就直接上揹包,結果毫無疑問的超時,然後我的乙個夥伴在打二維揹包暴力時手抖打錯打出了正解……

我們設f[i][j]表示當前選了i個數,這i個數的和為j的方案數。顯然我們有一種方案是將原有和為j-i的i個數全部加1得到和為j的i個數。第二種方案則是將和為j-i的i-1個數加入乙個i使之達到和為j的i個數。

#include

#include

#include

#include

#include

#define ll long long

using

namespace

std;

const ll maxn=5e4+5,mo=1e9+7;;

ll n,i,t,j,k,l,f[320][maxn];

int main()

51nod 1201 整數劃分

1201 整數劃分 基準時間限制 1 秒 空間限制 131072 kb 分值 80 難度 5級演算法題 將n分為若干個不同整數的和,有多少種不同的劃分方式,例如 n 6,共4種。由於資料較大,輸出mod 10 9 7的結果即可。input 輸入1個數n 1 n 50000 output 輸出劃分的數...

51nod 1201 整數劃分

dp轉移方程 dp i j dp i j j dp i j j 1 dp i j 表示將i分成j個不相等的數的個數。dp i j j dp i j 表示給原先的j個數各加一 dp i j j 1 dp i j 表示給原先的j 1的數加1,再附帶個1.因為不相等的數,所以n n 1 2 5e4 5,n...

51NOD 1201 整數劃分

題意 將n劃分成不同正整數的和的方案數。演算法 動態規劃 題解 暴力 f i j 只用前1.i的數字,總和為j的方案數 本質上是01揹包,前i個物體,總質量為j的方案數 f i j f i 1 j f i 1 j i 複雜度o n 2 優化 我們發現,因為要求數字不同,那麼數字最多也小於sqrt n...