「日常训练」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 ...
随机推荐
- 2018.12.15 struts.xml 一般配置文件写法 && 配置动态方法
struts.xml 原始配置文件 配置 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE s ...
- ASP.NET SignalR 与LayIM配合,轻松实现网站客服聊天室(三) 激动人心的时刻到啦,实现1v1聊天
看起来挺简单,细节还是很多的,好,接上一篇,我们已经成功连接singalR服务器了,那么剩下的内容呢,就是一步一步实现聊天功能. 我们先看看缺什么东西 点击好友弹框之后,要给服务器发消息,进入组Gro ...
- 【题解】洛谷P1066 [NOIP2006TG] 2^k进制数(复杂高精+组合推导)
洛谷P1066:https://www.luogu.org/problemnew/show/P1066 思路 挺难的一道题 也很复杂 满足题目要求的种数是两类组合数之和 r的最多位数m为 w/k(当w ...
- Introduction to CQRS
原文链接: http://www.codeproject.com/Articles/555855/Introduction-to-CQRS What is CQRS CQRS means Comma ...
- ACL常用命令及工作原理
What ACL 是一系列 IOS 命令,根据数据包报头中找到的信息来控制路由器应该转发还是应该丢弃数据包.ACL 是思科 IOS 软件中最常用的功能之一. 在配置后,ACL 将执行以下任务: 限制网 ...
- Aspose.cell C# 操作excel(通过批注信息给单元格赋值、批注信息获取公式得出结果并转PNG)
if (fileName == "") return ""; var CurrentRow = 0; Workbook work = new Workbook( ...
- IOS NSNotification 通知
一. 先看下官方对NSNotification通知的解释 1. NSNotification 通知 @interface NSNotification : NSObject <NSCopying ...
- WebGL学习笔记(4)
本篇笔记加强了上篇笔记示例代码的程序,实现了使用nodejs-websocket来广播每个玩家的坐标数据并在同一个世界模型中进行多人在线交互. websocket服务端: 安装nodejs与npm,创 ...
- noip模拟赛 动态仙人掌(并查集,贪心)
思路: 贪心+并查集 因为45‘,所以可以很方便的算出每个仙人掌的最晚起跳(左端点) 右端点自然也能出来 先按左端点排序 如果他右面的和他相交,就更新 用并查集维护这个更新的关系 更新的同时维护高就好 ...
- Django模板简介
在settings.py中有个TEMPLATES的设置,其中BACKEND用来配置Django模板引擎, DIRS 定义了一个目录列表,模板引擎按列表顺序搜索这些目录以查找模板源文件 一般我们都会把模 ...