首页 > 其他 > 详细

[bzoj1037]生日聚会

时间:2019-10-27 15:35:46      阅读:69      评论:0      收藏:0      [点我收藏+]

dp,用f[i][j][x][y]表示i个男孩,j个女孩,以i+j为结尾的子序列男-女最多为x,女-男最多为y的合法方案数,转移到f[i+1][j][x+1][max(y-1,0)]和f[i][j+1][max(x-1,0)][y+1](注意要保证x和y不超过k)

技术分享图片
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define add(x,y) x=(x+y)%12345678
 4 int n,m,k,ans,f[205][205][25][25];
 5 int main(){
 6     scanf("%d%d%d",&n,&m,&k);
 7     f[0][0][0][0]=1;
 8     for(int i=0;i<=n;i++)
 9         for(int j=0;j<=m;j++)
10             for(int x=0;x<=k;x++)
11                 for(int y=0;y<=k;y++){
12                     if ((i<n)&&(y<k))add(f[i+1][j][max(x-1,0)][y+1],f[i][j][x][y]);
13                     if ((j<m)&&(x<k))add(f[i][j+1][x+1][max(y-1,0)],f[i][j][x][y]);
14                 }
15     for(int i=0;i<=k;i++)
16         for(int j=0;j<=k;j++)add(ans,f[n][m][i][j]);
17     printf("%d",ans); 
18 }
View Code

 

[bzoj1037]生日聚会

原文:https://www.cnblogs.com/PYWBKTDA/p/11747545.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!