傳送門
這道題其實是可以盒子空著不放的。。。
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 個盒子中,問有多少種放的方法 但是只給出這樣的條件並不足夠,我們必須加上一些限制,否則結果是不確定的 一般加的有三個限制,即小球是否有區別 盒子是否有區別 允不允許有空盒子,也因此可以組合出八種不同的問題 接下來我們...