openjudge 盒子與小球之三(dp)

2021-07-24 01:25:45 字數 865 閱讀 5942

傳送門

這道題其實是可以盒子空著不放的。。。

f(i,j)表示前i個盒子裡放了j個小球的方案數。那麼 f(

i,j)

=∑p=

0min

(j,k

)f(i

−1,j

−p) ,也就是列舉最後乙個盒子放了幾個小球。

這樣暴力dp是o(

n3) 的。可以發現加乙個滾動和字首和就可以優化成o(

n2) 。o(

n3)

#include

#include

#include

using

namespace

std;

#define mod 1000007

#define n 5005

int n,m,k;

int f[n][n];

int main()

}printf("%d\n",f[n][m]);

}

o(

n2)

#include

#include

#include

using

namespace

std;

#define mod 1000007

#define n 5005

int n,m,k;

int f[2][n],s[2][n];

int main()

for (int j=m+1;j<=5000;++j) s[i&1][j]=s[i&1][j-1];

}printf("%d\n",f[n&1][m]);

}

盒子與小球系列題解

盒子與小球,noi 題庫的一系列題,可在noi題庫中提交。盒子與小球二 n個有差別的盒子 1 n 20 你有a個紅球和b個藍球。0 a 15,0 b 15。球除了顏色沒有任何區別。你可以將球放進盒子。乙個盒子可以同時放進兩種球,也可以只放一種,也可以空著。球不必全部放入盒子中。程式設計計算有多少種放...

盒子與小球之二

n個有差別的盒子 1 n 20 你有a個紅球和b個藍球。0 a 15,0 b 15。球除了顏色沒有任何區別。你可以將球放進盒子。乙個盒子可以同時放進兩種球,也可以只放一種,也可以空著。球不必全部放入盒子中。程式設計計算有多少種放置球的方法。就一行,n,a,b,用空格分開 就一行,輸出放置方案總數 2...

小球與盒子的問題

這類問題的基本模型是 你有 n 個小球,m 個盒子,現在想把這 n 個小球放進 m 個盒子中,問有多少種放的方法 但是只給出這樣的條件並不足夠,我們必須加上一些限制,否則結果是不確定的 一般加的有三個限制,即小球是否有區別 盒子是否有區別 允不允許有空盒子,也因此可以組合出八種不同的問題 接下來我們...