zoukankan      html  css  js  c++  java
  • Codeforces Round #439 (Div. 2)C

    传送门

    题意

    给出三个集合,每个集合的元素数量为a,b,c,现在需要连边,满足集合内元素不可达或最短路为3,求可行方案数

    分析

    设dp[i][j]为a集合元素为i个,b集合元素为j个的可行方案,易知(a,b),(b,c),(c,a)的方案是独立的,且可行方案为a->b->c,或旋转形式,那么就求一个两个集合的连边方案数即可。
    转移方程 dp[i][j]=dp[i-1][j]+dp[i-1][j-1]*j;

    trick

    代码

    #include <bits/stdc++.h>
    using namespace std;
    
    #define ll long long
    #define F(i,a,b) for(int i=a;i<=b;++i)
    #define R(i,a,b) for(int i=a;i<b;++i)
    #define mem(a,b) memset(a,b,sizeof(a))
    
    const ll mod = 998244353;
    ll a,b,c;
    ll dp[5050][5050];
    int main()
    {
    	cin>>a>>b>>c;
    	F(i,0,5000) dp[i][0]=dp[0][i]=1;
    	F(i,1,5000)F(j,1,5000) dp[i][j]=(dp[i-1][j]+dp[i-1][j-1]*j%mod)%mod;
    	ll ans=1;
    	ans=ans*dp[a][b]%mod*dp[b][c]%mod*dp[c][a]%mod;
    	cout<<ans<<endl; 
    	return 0;
    }
    
  • 相关阅读:
    django 如何重用app
    vim常用命令
    linux find grep
    linux su su-的区别
    linux定时任务crontab
    linux shell的单行多行注释
    python字符串的截取,查找
    gdb调试
    python字符转化
    python读写文件
  • 原文地址:https://www.cnblogs.com/chendl111/p/7634323.html
Copyright © 2011-2022 走看看