將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...