Codeforces 869C The Intriguing Obsession:组合数 or dp
题目链接:http://codeforces.com/problemset/problem/869/C
题意:
红色、蓝色、紫色的小岛分别有a,b,c个。
你可以在两个不同的岛之间架桥,桥的长度为1。
任意两个颜色相同的岛之间的距离不能小于3。
问你合法的架桥方案数。
题解:
显然只能在不同颜色的岛之间连边。
而且一个岛对于一种颜色,最多只能连一个岛。
设f(x,y)表示两种颜色的岛相互连边,分别有x,y个,连边的方案数。(x < y)
那么ans = f(a,b) * f(b,c) * f(a,c)
解法1(组合数):
枚举共连了k条边,k∈[1,x]。
那么连了k条边的方案数 = C(x,k) * C(y,k) * k!
总方案数f(x,y) = ∑(C(x,k) * C(y,k) * k!)
解法2(dp):
向其中A集合中加入一个岛,要么不连边,要么根B集合中的任意一个点连边(共j种方案)。
f(i,j) = f(i-1,j) + f(i-1,j-1)*j
AC Code(combination):
#include <iostream>
#include <stdio.h>
#include <string.h>
#define MAX_N 5005
#define MOD 998244353 using namespace std; int mx=;
int a[];
long long f[MAX_N];
long long c[MAX_N][MAX_N];
long long ans=; void cal_f()
{
f[]=;
for(int i=;i<=mx;i++) f[i]=f[i-]*i%MOD;
} void cal_c()
{
c[][]=;
for(int i=;i<=mx;i++)
{
c[i][]=;
for(int j=;j<=i;j++)
{
c[i][j]=(c[i-][j-]+c[i-][j])%MOD;
}
}
} int main()
{
for(int i=;i<;i++)
{
cin>>a[i];
mx=max(mx,a[i]);
}
cal_f();
cal_c();
for(int i=;i<;i++)
{
for(int j=i+;j<;j++)
{
int x=min(a[i],a[j]);
int y=max(a[i],a[j]);
int sum=;
for(int k=;k<=x;k++)
{
sum=(sum+c[x][k]*c[y][k]%MOD*f[k])%MOD;
}
ans=ans*sum%MOD;
}
}
cout<<ans<<endl;
}
AC Code(dp):
#include <iostream>
#include <stdio.h>
#include <string.h>
#define MAX_N 5005
#define MOD 998244353 using namespace std; int a,b,c;
long long dp[MAX_N][MAX_N]; int main()
{
cin>>a>>b>>c;
int mx=max(a,max(b,c));
for(int i=;i<=mx;i++)
{
dp[i][]=dp[][i]=;
}
for(int i=;i<=mx;i++)
{
for(int j=;j<=mx;j++)
{
dp[i][j]=(dp[i-][j]+dp[i-][j-]*j)%MOD;
}
}
cout<<dp[a][b]*dp[b][c]%MOD*dp[a][c]%MOD<<endl;
}
Codeforces 869C The Intriguing Obsession:组合数 or dp的更多相关文章
- codeforces 869C The Intriguing Obsession【组合数学+dp+第二类斯特林公式】
C. The Intriguing Obsession time limit per test 1 second memory limit per test 256 megabytes input s ...
- CodeForces - 869C The Intriguing Obsession(组合数)
题意:有三个集合,分别含有a.b.c个点,要求给这些点连线,也可以全都不连,每两点距离为1,在同一集合的两点最短距离至少为3的条件下,问有多少种连接方案. 分析: 1.先研究两个集合,若每两个集合都保 ...
- Codeforces 869C The Intriguing Obsession
题意:有三种颜色的岛屿各a,b,c座,你可以在上面建桥.联通的点必须满足以下条件:1.颜色不同.2.颜色相同且联通的两个点之间的最短路径为3 其实之用考虑两种颜色的即可,状态转移方程也不难推出:F[i ...
- Codeforces Round #439 (Div. 2)C - The Intriguing Obsession(简单dp)
传送门 题意 给出三个集合,每个集合的元素数量为a,b,c,现在需要连边,满足集合内元素不可达或最短路为3,求可行方案数 分析 设dp[i][j]为a集合元素为i个,b集合元素为j个的可行方案,易知( ...
- cf 869c The Intriguing Obsession
题意:有三种三色的岛,用a,b,c来标识这三种岛.然后规定,同种颜色的岛不能相连,而且同种颜色的岛不能和同一个其他颜色的岛相连.问有多少种建桥的方法. 题解:em....dp.我们先看两个岛之间怎么个 ...
- Codeforces Round #439 (Div. 2) C. The Intriguing Obsession
C. The Intriguing Obsession 题目链接http://codeforces.com/contest/869/problem/C 解题心得: 1.由于题目中限制了两个相同 ...
- 「日常训练」The Intriguing Obsession(CodeForces Round #439 Div.2 C)
2018年11月30日更新,补充了一些思考. 题意(CodeForces 869C) 三堆点,每堆一种颜色:连接的要求是同色不能相邻或距离必须至少3.问对整个图有几种连接方法,对一个数取模. 解析 要 ...
- Codeforces 219D. Choosing Capital for Treeland (树dp)
题目链接:http://codeforces.com/contest/219/problem/D 树dp //#pragma comment(linker, "/STACK:10240000 ...
- code forces 439 C. The Intriguing Obsession
C. The Intriguing Obsession time limit per test 1 second memory limit per test 256 megabytes input s ...
随机推荐
- TestClass必须是public的
运行一个测试类遇到一下问题: namespace TestSample.Sample { [TestClass] class CynthiaTest { [Te ...
- 浅谈Spring框架注解的用法分析
原文出处: locality 1.@Component是Spring定义的一个通用注解,可以注解任何bean. 2.@Scope定义bean的作用域,其默认作用域是”singleton”,除此之外还有 ...
- Directory和HashTable的区别
1:单线程程序中推荐使用 Dictionary, 有泛型优势, 且读取速度较快, 容量利用更充分.2:多线程程序中推荐使用 Hashtable, 默认的 Hashtable 允许单线程写入, 多线程读 ...
- 练习: 省市联动(Ajax)
// 示例一: china.xml (位于 src 目录下) <?xml version="1.0" encoding="utf-8"?> < ...
- ubuntu(已经配置了python2+opencv)简易配置python3的opencv:
所达到的效果就是python2与python3都能使用opencv参考:http://blog.csdn.net/jiandanjinxin/article/details/71438780https ...
- standard pbr(二)
下一步看像素着色器代码 half4 fragBase (VertexOutputForwardBase i) : SV_Target { return fragForwardBaseInternal( ...
- Linux python3安装/shell脚本/if/循环/函数
python3安装 安装过程 安装包: wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgztar -xvf Python-3.7 ...
- 005-搭建框架-实现AOP机制【二】AOP技术
一.什么是AOP aspect-oriented programming,面向切面编程,对oop的一种补充. 著名示例,aspectj,spring+aspectj 二.aop之代码重构 2.1.代 ...
- Ubuntu 下 java 版本的切换
切换的方法很简单,使用下面的两个命令即可: update-alternatives --config java update-alternatives --config javac eg: root@ ...
- 0608pm单例模式and面向对象的六大原则
//把类控制住,不让外界造她的对象class DA{ public $name; static private $dx;//存放对象的变量 //将构造变为私有,外界没法造对象 private func ...