51Nod 1201 整數劃分 經典dp

2022-04-10 02:17:46 字數 889 閱讀 1538

題意不多說了。

dp[i][j]表示i這個數劃分成j個數的情況數。

dp[i][j] = dp[i - 1][j] + dp[i - 1][j - 1]

前者表示將i - 1劃分為j個數,然後j個數都+1 還是不重複

後者表示將i - 1劃分為j - 1個數,然後j - 1個數都+1,再加上1這個數

普通的dp是n^2的,但是可以發現1 + 2 + ... + m = n , (1 + m)*m = n * 2,j只要遍歷sqrt(n * 2)個就好了。所以複雜度為n*sqrt(n*2)

1

//#pragma comment(linker, "/stack:102400000, 102400000")

2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include

12 #include 13

using

namespace

std;

14 typedef long

long

ll;15 typedef pair p;

16const

int n = 5e4 + 5;17

int dp[n][350], mod = 1e9 + 7;18

19int

main()

2029}30

int ans = 0;31

for(int i = 1; i <= n; ++i)

34 printf("

%d\n

", ans);35}

36return0;

37 }

整數劃分 51Nod 1201 (經典dp)

將n分為若干個不同整數的和,有多少種不同的劃分方式,例如 n 6,共4種。由於資料較大,輸出mod 10 9 7的結果即可。input 輸入1個數n 1 n 50000 output 輸出劃分的數量mod 10 9 7。sample input 6sample output 4這道題 剛寫的時候 使...

51nod 1201 整數劃分

將n分為若干個不同整數的和,有多少種不同的劃分方式,例如 n 6,共4種。由於資料較大,輸出mod 10 9 7的結果即可。1 n 50000 直接一看就想到是一道最簡單揹包問題 但n 50000 然後我就直接上揹包,結果毫無疑問的超時,然後我的乙個夥伴在打二維揹包暴力時手抖打錯打出了正解 我們設f...

51nod 1201 整數劃分

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