那一天我們許下約定

2022-05-06 22:45:08 字數 1727 閱讀 6082

那一天我們在教室裡許下約定。

我至今還記得我們許下約定時的歡聲笑語。我記得她說過她喜歡吃餅乾,很在意自己體重的同時又控制不住自己。她跟我做好了約定:我拿走她所有的餅乾共\(n\)塊,在從今天起不超過\(d\)天的時間裡把所有的餅乾分次給她,每天給她的餅乾數要少於m以防止她吃太多。

當然,我們的約定並不是餅乾的約定,而是一些不可言狀之物。

現今回想這些,我突然想知道,有多少種方案來把餅乾分給我的她。

對於30%的資料

對於100%的資料

\(n\)

\(n≤ 20\)

\(n≤ 2000\)

\(d\)

\(d≤ 20\)

\(d≤ 10^\)

\(m\)

\(m≤ 10\)

\(m≤ 2000\)

考場上看到這道題,首先想到了乙個類似於揹包的dp,共有\(n\)塊餅乾,每天取至多\(m-1\)塊餅乾,求在\(d\)天之內取完的方案數。

設\(f[i][j]\)表示\(i\)天取了\(j\)個的方案數,方程\(f[i][j]+=f[i-1][j-k]\)

for(int i=2;i<=d;i++)^nf[i][n]*c_d^i\)

這樣就可以把1~d的列舉縮小到1~n的列舉

可經過這樣的優化組合數還不好計算。如果用楊輝三角遞推在時間和空間上都無法承受。

由於\[c^m_n=\frac=\frac

\]因為d很大,而m,n都比較小,所以可以預處理出\(p^i_d\)以及\(i!\)的mod質數p時的逆元。\((1<=i<=n)\)

\[(n!)^\space (mod\space p)=(n!)^\space (mod \space p)

\]這樣優化後還是會t,我們再去觀察dp轉移,\(f[i][j]=\sum_^f[i-1][j-k]\)

可以發現,當前某一狀態是從上一層某一段區間轉移來的。

這樣就自然想到了可以再用字首和預處理

\[f[i][j]=(sum[i-1][j-1]-sum[i-1][max(j-m,0)]

\]預處理出sum陣列後,複雜度大大降低。

#include#define ll long long

#define mod 998244353

using namespace std;

inline ll read()

while(isdigit(ch))

return s*w;

}ll ans;

ll f[2005][2005];

ll a[2005],a[2005]; //a排列陣列,a階乘陣列

ll n,d,m;

ll pow[2005]; //逆元。

ll c[2005];

ll sum[2005][2005];

ll quick_pow(ll a,ll p)

return ans;

}void init()

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

c[i]=a[i]%mod*pow[i]%mod;

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

sum[1][i]=(sum[1][i-1]+f[1][i])%mod;

}int main()

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

printf("%lld\n",ans%mod);

}return 0;

}

DP 那一天我們許下約定

那一天我們在教室裡許下約定。我至今還記得我們許下約定時的歡聲笑語。我記得她說過她喜歡吃餅乾,很在意自己體重的同時又控制不住自己。她跟我做好了約定 我拿走她所有的餅乾共n塊,在從今天起不超過d天的時間裡把所有的餅乾分次給她,每天給她的餅乾數要少於m以防止她吃太多。當然,我們的約定並不是餅乾的約定,而是...

HZOI2019 A 那一天我們許下約定 dp

題目大意 讀這道題的題目讓我想起了。woc我到底在想什麼?好好寫題解,現在不是幹那個的時候!好吧,這題我交了20多次,一開始發現爆了long long,連慢速乘都用上了 但毫無改觀,2000 1000000000000 2000的資料都能過,為什麼還是30分?後來我頹了個 對於次題的題解 還是看官方...

等待 驗證我們結局的那一天

等待 驗證我們結局的那一天 等待 驗證我們結局的那一天 總有那麼一天,你會厭倦我。會覺得我的舉動不再可愛 會 討厭我的嘮嘮叨叨 會讓我開始乙個人自己做很多事情 會認為我的小吃醋是非常的無理取鬧 會開始想是否真的合適 會想要乙個沒有我的,你的安靜空間 會感覺有壓力,是不是責任太重 會有很多煩心的事,可...