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 ...
随机推荐
- 初步认识dubbo--小案例
Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合).从服务模型的角度来看,Dubbo采用的是一种非常简单的模 ...
- php var_dump()函数的详解
说明:var_dump()方法,判断一个变量的类型与长度,并输出变量的数值,如果变量有值,则输出是变量的值,并返回数据类型.显示关于一个或多个表达式的结构信息,包括表达式的类型与值.数组将递归展开值, ...
- 打日志--以python为例
日志报错要去修,要不然是隐患,总有一天会爆炸 增加日志是排错的好方法,不要不舍得加日志,比如怕代码变难看,怕日志输出太多. python logging exc_info sys.exc_info() ...
- MDF损坏或LDF文件损坏
MDF损坏或LDF损坏 MDF丢失或LDF丢失 注意,这些情况必须要相同版本的sql server才能操作成功 当MDF损坏时 1.备份结尾日志 http://www.cnblogs.com/gere ...
- 【python】判断字符串以什么开头或结尾
项目中用到python判断一个字符串是否以某个字符串结尾,比如,筛选一个目录下所有以.mp4结尾的文件. >>> item = "demo.mp4" >&g ...
- numpy利用数组进行数据处理
将条件逻辑表述为数组运算 numpy.where()是一个三目运算的表达式 In [34]: xarr = np.array([1.1,1.2,1.3,1.4,1.5]) In [35]: yarr ...
- python操作——RabbitMQ
RabbitMQ是一个在AMQP基础上完整的,可服用的企业消息系统.他遵循Mozilla Public License开源协议. MQ全称为Message Queue,消息队列(MQ)是一种应用程序对 ...
- 软件工作考核项(zcl)——
注意:这里没有对代码风格做要求,因为要代码走查! 考核项 考核标准 分数等级 需求规格说明书编写 主要用例图缺失 -1 主要软件界面设计图缺失 -1 主要功能清单项目缺失 -1 主要复 ...
- 解决eclipse不识别Android手机的问题
from:http://www.apkbus.com/blog-3-39569.html 搭好Android开发环境之后,用模拟器运行Android程序没有问题,但是将手机用USB连接电脑后,电脑不识 ...
- 流量分析系统----实现-echarts模拟迁移(bmap.js/china.js)
china.js: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...