「日常训练」The Intriguing Obsession(CodeForces Round #439 Div.2 C)
2018年11月30日更新,补充了一些思考。
题意(CodeForces 869C)
三堆点,每堆一种颜色;连接的要求是同色不能相邻或距离必须至少3。问对整个图有几种连接方法,对一个数取模。
解析
要求很重要:同色不能相邻很容易理解,但是>=3比较难理解。比较常见的是R->G->B->R,这样能看出来一个重要的结论:对单个节点只能连接某个颜色至多一个点(不然一定有距离为2的点)。
这样一来我们思考一下状态会和哪些东西有关联:如果我放一个一个新颜色在里面,它会怎么同原图产生联系?一是和几种颜色相连接,二是同几个点相连接,三就是不连接。(这是显然的,只能往这三个方向考虑)考虑第一个问题,会得出由上面加粗的情况,只能得到这个点只能和单种其他颜色连接的结论(也就是说,同一时刻我们只需要考虑两种颜色)。考虑第二个问题,会得出当它同某个点连接的时候,这个点将必须独立出来,不然不合题意(可能有人会思考,如果颜色是C,这个点本身是B,而它只是B->A,为什么一定要独立呢?原因很简单,在这里我们不考虑第三种颜色的影响,因为他们没有影响;那么这个情况下它就只是一个单独的点,仍然是相当于被独立出来的)。而将前两个问题同第三个问题结合起来,就能发现我们的状态了:$dp[i][j]$为第一个颜色有i个、第二个颜色有j个的情况下的方法数。它会有两种决策:新点要么与另一个颜色点群不连接,那么相当于无事发生过;要么与其中的一个点连接。而在只有这两个颜色的情况下,这个点只能跟这个新点独立出来(前面的结论)。因此有转移方程:$$dp[i][j]=dp[i-1][j]+dp[i-1][j-1]\times j,dp[i][0]=dp[0][i]=1$$
这是两色下的转移方程,而两两之间的颜色是互不影响的,根据乘法原理,将三对的方案数相乘即可得解。注意到题目的n不超过5000,可以直接$O(n^2)$算法走人。
代码
#include <bits/stdc++.h>
#define PB push_back
#define MP make_pair
#define fi first
#define se second
#define ZERO(X) memset((X),0,sizeof(X))
#define ALL(X) X.begin(),X.end()
#define F0(X,Y) for(int (X)=0;(X)!=(Y);++(X))
#define F1(X,Y) for(int (X)=1;(X)<=(Y);++(X))
using namespace std;
typedef pair<int,int> PI;
typedef pair<pair<int,int>, int> PII;
typedef pair<pair<pair<int,int>, int>, int> PIII;
typedef long long ll;
typedef unsigned long long ull;
ll dp[5005][5005];
const ll mod=998244353;
int main()
{
int a,b,c; cin>>a>>b>>c;
int maxn=max(a,max(b,c));
ZERO(dp);
dp[1][0]=dp[0][1]=dp[0][0]=1;
for(int i=1;i<=maxn;++i) dp[0][i]=dp[i][0]=1;
for(int i=1;i<=maxn;++i)
for(int j=1;j<=maxn;++j)
dp[i][j]=((dp[i-1][j]%mod)+((dp[i-1][j-1]%mod)*j)%mod)%mod;
cout<<(((dp[a][b]*dp[b][c])%mod)*dp[a][c])%mod<<endl;
return 0;
}
「日常训练」The Intriguing Obsession(CodeForces Round #439 Div.2 C)的更多相关文章
- 「日常训练」Watering Flowers(Codeforces Round #340 Div.2 C)
题意与分析 (CodeForces 617C) 题意是这样的:一个花圃中有若干花和两个喷泉,你可以调节水的压力使得两个喷泉各自分别以\(r_1\)和\(r_2\)为最远距离向外喷水.你需要调整\(r_ ...
- 「日常训练」Alternative Thinking(Codeforces Round #334 Div.2 C)
题意与分析 (CodeForces - 603A) 这题真的做的我头疼的不得了,各种构造样例去分析性质... 题意是这样的:给出01字符串.可以在这个字符串中选择一个起点和一个终点使得这个连续区间内所 ...
- 「日常训练」More Cowbell(Codeforces Round #334 Div.2 B)
题意与分析(CodeForces 604B) 题意是这样的:\(n\)个数字,\(k\)个盒子,把\(n\)个数放入\(k\)个盒子中,每个盒子最多只能放两个数字,问盒子容量的最小值是多少(水题) 不 ...
- 「日常训练」Ice Cave(Codeforces Round 301 Div.2 C)
题意与分析(CodeForces 540C) 这题坑惨了我....我和一道经典的bfs题混淆了,这题比那题简单. 那题大概是这样的,一个冰塔,第一次踩某块会碎,第二次踩碎的会掉落.然后求可行解. 但是 ...
- 「日常训练」School Marks(Codeforces Round 301 Div.2 B)
题意与分析(CodeForces 540B) 题意大概是这样的,有一个考试鬼才能够随心所欲的控制自己的考试分数,但是有两个限制,第一总分不能超过一个数,不然就会被班里学生群嘲:第二分数的中位数(科目数 ...
- 「日常训练」Regular Bridge(Codeforces Round 306 Div.2 D)
题意与分析 图论基础+思维题. 代码 #include <bits/stdc++.h> #define MP make_pair #define PB emplace_back #defi ...
- 「日常训练」Two Substrings(Codeforces Round 306 Div.2 A)
题意与分析 一道非常坑的水题.分析醒了补. 代码 #include <bits/stdc++.h> #define MP make_pair #define PB emplace_back ...
- 「专题训练」Hard problem(Codeforces Round #367 Div. 2 C)
题意与分析 题意:给出\(n\)个字符串,可以反转任意串,反转每个串都有其对应的花费\(c_i\).经过操作后是否能满足字符串\(\forall i \in [1,n] \text{且} i \in ...
- Codeforces Round #439 (Div. 2)【A、B、C、E】
Codeforces Round #439 (Div. 2) codeforces 869 A. The Artful Expedient 看不透( #include<cstdio> in ...
随机推荐
- 【转】Android手机分辨率基础知识(DPI,DIP计算)
1.术语和概念 术语 说明 备注 Screen size(屏幕尺寸) 指的是手机实际的物理尺寸,比如常用的2.8英寸,3.2英寸,3.5英寸,3.7英寸 摩托罗拉milestone手机是3.7英寸 A ...
- 最短路算法 —— Dijkstra算法
用途: 解决单源最短路径问题(已固定一个起点,求它到其他所有点的最短路问题) 算法核心(广搜): (1)确定的与起点相邻的点的最短距离,再根据已确定最短距离的点更新其他与之相邻的点的最短距离. (2) ...
- thinkphp 实现移动端和PC端显示不同的模板
1.首先在项目模块下的Common文件夹内建立function.php文件,这样就可以首先执行这里的函数了.所以在这里判断是否是移动端访问的,判断方法如下: function ismobile() { ...
- 【luogu P3371 单源最短路径】 模板 SPFA
题目链接:https://www.luogu.org/problemnew/show/P3371 我永远都喜欢Flyod.dijkstra + heap.SPFA #include <cstdi ...
- 理解Storm可靠性消息
看过一些别人写的, 感觉有些东西没太说清楚,个人主要以源代码跟踪,参考个人理解讲述,有错误请指正. 1基本名词 1.1 Tuple: 消息传递的基本单位.很多文章中介绍都是这么说的, 个人觉得应该更详 ...
- 访问oracle数据库
如果是本地 :sqlplus system/xxx(用户名/密码) 远程到服务器, sqlplus system/xxx(用户名/密码) @IP:port/orcl(orcl为数据库实例)
- java面向对象编程思想的理解
1.我们总说java是一门面向对象编程的语言,那什么是面向对象呢? 我是这样理解的,对象是事物存在的实体,如,猪.狗,花早等都是对象,对象由两部分组成.面向对象编程的三大特点:继承,多态,类是封装对象 ...
- ASP.NET成员资格和角色管理
一.成员资格管理 1.成员资格管理模型 ASP.NET提供的成员资格管理功能,其核心是利用内置的成员库表(SQL Server).成员资格管理API(Membership.MembershipUser ...
- 【mysql学习-1】
part-1: #use mysql;/*show tables;select * from user;use mysql;show databases;#create database db1; # ...
- MAthJax入门教程(五分钟上手)
最近在研究,在页面中显示一些数学公式.搞得我很头疼. 据说MathJax会统一这已领域.所以去学了学.网上教程特别多.繁杂. 说的清楚的特别少. 我是这么跑通的,: 1.在官网下载代码地址为:http ...