傳送門biu~
如果求乙個01序列滿足任意一段0和1的數量差不超過k,可以考慮在已滿足條件的某序列後面填一位0或1,只考慮當前序列的所有字尾是否滿足0和1數量差不超過k的條件。這樣我們就判斷了最終序列的所有字首的字尾是否滿足條件,即任意一段0和1的數量差是否超過k。
令f[i][j][x][y]表示有i個男孩j個女孩的序列的所有字尾中男孩數量比女孩最多多x,女孩數量比男孩數量最多多y的方案數。
那麼序列後填乙個男孩時f[i+1][j][x+1][max(y-1,0)]+=f[i][j][x][y];填乙個女孩時f[i][j+1][max(x-1,0)][y+1]+=f[i][j][x][y]。
#include
using namespace std;
const int mod=12345678;
int n,m,k,ans,f[155][155][25][25];
int main()}}
}for(int i=0;i<=k;++i)
for(int j=0;j<=k;++j)
ans=(ans+f[n][m][i][j])%mod;
printf("%d\n",ans);
return
0;}
生日聚會 BZOJ 1037
生日聚會 問題描述 今天是hidadz小朋友的生日,她邀請了許多朋友來參加她的生日party。hidadz帶著朋友們來到花園中,打算坐成一排玩遊戲。為了遊戲不至於無聊,就座的方案應滿足如下條件 對於任意連續的一段,男孩與女孩的數目之差不超過k。很快,小朋友便找到了一種方案坐了下來開始遊戲。hidad...
bzoj1037 ZJOI2008 生日聚會
bzoj1037 zjoi2008 生日聚會 題意 一排小孩坐著玩遊戲。就座的方案滿足如下條件 對於任意連續的一段,男孩與女孩的數目之差不超過k。給出男孩數,女孩數和k,求就座方案數除以12345678的餘數。題解 dp方程見程式,i1i2表示當前選了幾男幾女,i3i4分別表示當前男比女多幾個和女比...
bzoj1037 ZJOI2008 生日聚會
今天是hidadz小朋友的生日,她邀請了許多朋友來參加她的生日party。hidadz帶著朋友們來到花園中,打算坐成一排玩遊戲。為了遊戲不至於無聊,就座的方案應滿足如下條件 對於任意連續的一段,男孩與女孩的數目之差不超過k。很快,小朋友便找到了一種方案坐了下來開始遊戲。hidadz的好朋友susie...