1 条题解

  • 1
    @ 2023-11-2 7:42:47

    具体思路

    fi,j,k,lf_{i,j,k,l} 表示放置了 ii 个男生,jj 个女生,最后一段男生比女生多 kk 个,女生比男生多 ll 个。

    fi+1,j,k+1,max(l1,0)+=fi,j,k,lf_{i+1,j,k+1,\max(l-1,0)}+=f_{i,j,k,l} fi,j+1,max(k1,0),l+1+=fi,j,k,lf_{i,j+1,\max(k-1,0),l+1}+=f_{i,j,k,l}

    Code

    #include<bits/stdc++.h>
    using namespace std;
    const int N=200,M=25;
    const int mod=12345678;
    int f[N][N][M][M];
    int main(){
    	int n,m,K;scanf("%d%d%d",&n,&m,&K);
    	f[0][0][0][0]=1;
    	for(int i=0;i<=n;i++)
    		for(int j=0;j<=m;j++)
    			for(int k=0;k<=K;k++)
    				for(int l=0;l<=K;l++)
    					if(f[i][j][k][l]){
    						f[i+1][j][k+1][max(l-1,0)]=(f[i+1][j][k+1][max(l-1,0)]+f[i][j][k][l])%mod;
    						f[i][j+1][max(k-1,0)][l+1]=(f[i][j+1][max(k-1,0)][l+1]+f[i][j][k][l])%mod;
    					}
    	int ans=0;
    	for(int i=0;i<=K;i++)
    		for(int j=0;j<=K;j++)
    			ans=(ans+f[n][m][i][j])%mod;
    	printf("%d",ans);
    	return 0;
    }
    
    • 1

    信息

    ID
    1037
    时间
    1000ms
    内存
    162MiB
    难度
    9
    标签
    (无)
    递交数
    8
    已通过
    6
    上传者