首页 > 其他分享 >AGC067B 做题记录

AGC067B 做题记录

时间:2024-09-25 11:36:01浏览次数:1  
标签:覆盖 记录 ll 位置 maxn 区间 AGC067B define

link

考虑时光倒流,相当于每次选择一个区间,若未覆盖的位置的颜色都相同,则把区间里的所有位置覆盖,一个序列合法当且仅当经过若干次覆盖后 \([1,n]\) 中所有位置都被覆盖。

容斥,考虑经过若干次覆盖后,还剩未覆盖位置集合 \(S\),满足不存在可以继续覆盖 \(S\) 中的位置的区间。

\(S\) 把原序列分成了若干个区间,发现每个子区间的问题是独立的,可以设 \(dp[l, r]\) 表示通过 \([l, r]\) 内的区间,最终可以将 \([l, r]\) 所有位置覆盖的合法序列数量。

那么对于一个固定的 \(S\) 来说,我们可以计算它的额外系数,为若干个子区间的 \(dp[l, r]\) 乘积。现在的问题是,如何判定一个 \(S\) 集合中对应位置的染色方案是否合法。

对于极大的未被覆盖的同色段 \([p, q]\),不存在 \([p, q]\) 内的区间,包含 \(S\) 中任意一个位置。考虑跳跃式决策的 DP:设 \(f[l, r, i]\) 表示对于子区间 \([l, r]\),且 \(r, i\in S\),其中 \(i\) 是上一个未被覆盖的位置的颜色与 \(r\) 的颜色不同的位置。

考虑转移,枚举 \(p\),考虑 \(f[l, i, p]\) 对 \(f[l, r, \_]\) 的贡献:

  • 若位置 \(r\) 的颜色与 \(i\) 相同,并且 \([p + 1, r - 1]\) 内不存在区间可以覆盖位置 \(i\):\(f[l, r, p] \gets f[l, i, p]\)

  • 若位置 \(r\) 的颜色与 \(i\) 不同,并且 \([p + 1, r - 1]\) 内不存在区间可以覆盖位置 \(i\):\(f[l, r, i] \gets f[l, i, p]\cdot (C - 1)\)

最终不合法的方案数为 \(\sum\limits_i \sum\limits_j [[j + 1, r] \text{ 内不存在区间可以覆盖位置 }i]f[l, i, j]\)。

点击查看代码
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define mkp make_pair
#define pir pair <ll, ll>
#define pb emplace_back
#define i128 __int128
using namespace std;
const ll maxn = 110, mod = 998244353;
ll n, m, c, ok[maxn][maxn][maxn];
ll dp[maxn][maxn], f[maxn][maxn][maxn];
void add(ll &x, const ll y) { x = x + y >= mod? x + y - mod : x + y; }
int main() {
	scanf("%lld%lld%lld", &n, &m, &c);
	for(ll i = 1; i <= m; i++) {
		ll l, r; scanf("%lld%lld", &l, &r);
		for(ll j = l; j <= r; j++)
			ok[l][r][j] = 1;
	}
	for(ll l = n; l; l--)
		for(ll r = l; r <= n; r++)
			for(ll i = l; i <= r; i++)
				ok[l][r][i] |= ok[l + 1][r][i] | ok[l][r - 1][i];
	for(ll i = 1; i <= n + 1; i++)
		dp[i][i - 1] = 1;
	for(ll l = n; l; l--) {
		for(ll r = l, prod = c; r <= n; r++, prod = prod * c %mod) {
			f[l][r][l - 1] = dp[l][r - 1] * c %mod;
			for(ll i = l; i < r; i++) {
				for(ll j = l - 1; j < i; j++) {
					if(!ok[j + 1][r - 1][i]) {
						add(f[l][r][i], f[l][i][j] * (c - 1)
						%mod * dp[i + 1][r - 1] %mod);
						add(f[l][r][j], f[l][i][j] *
						dp[i + 1][r - 1] %mod);
					}
				}
			} ll ret = 0;
			for(ll i = l; i <= r; i++)
				for(ll j = l - 1; j < r; j++)
					if(!ok[j + 1][r][i])
						add(ret, f[l][i][j] * dp[i + 1][r] %mod);
			dp[l][r] = (prod - ret + mod) %mod;
		}
	} printf("%lld", dp[1][n]);
	return 0;
}

标签:覆盖,记录,ll,位置,maxn,区间,AGC067B,define
From: https://www.cnblogs.com/Sktn0089/p/18430997

相关文章

  • 基于腾讯云 AI 代码助手的Web端宝可梦图鉴实践记录
    在编程的世界里,效率和质量是永恒的追求,每一位开发者不断追求的是如何以更快的速度、更高的质量完成代码的编写与调试。另一方面,大型语言模型,凭借其强大的神经网络架构和庞大数据训练,已具有模拟人类的语言理解与创造的能力,而这种能力的突破性进展让AI编程也成为现实。本篇文章,将介绍......
  • 【随手记录】docker部署jenkins,集成maven、spring项目
    1、下载镜像文件到服务器dockerpulljenkins/jenkins:lts-jdk17或离线导入镜像:dockerload-ijenkins-lts-jdk17检查镜像是否导入:dockerimages|grepjenkinsjenkins/jenkinslts-jdk177a7add0bf3da2weeksago470MB2024年6月以后国内很多大型的Dock......
  • 【随手记录】关于灰度发布
    线下测试很难覆盖线上的所有场景,即便是测试设计得非常完善,但仍旧会有差别,简单来说,线下测试与线上至少存在四个方面的不同:配置不同。线下环境与线上环境的应用版本保持一致不难,但配置方面往往存在差异,如服务规格、调试开关等。数据不同。线上的数据更真实、更丰富,场景也更多样。......
  • Leetcode 1472. 设计浏览器历史记录
    1.题目基本信息1.1.题目描述你有一个只支持单个标签页的浏览器,最开始你浏览的网页是homepage,你可以访问其他的网站url,也可以在浏览历史中后退steps步或前进steps步。请你实现BrowserHistory类:BrowserHistory(stringhomepage),用homepage初始化浏览器类。void......
  • Lab3 记录
    Part3A:leaderelection1.选举主要流程新服务器加入集群服务器在启动时状态是Follower。只要持续接收到Leader或Candidate的心跳信息,就继续保持Follower状态。开始选举每个Server都有一个随机的选举超时时间,选举超时在一个固定区间内随机选择(例如,150-300毫秒)如果Follo......
  • 2024.9.[23, 24]训练记录
    23上午whk。辅助角公式。诱导公式。23下午莫队:原序列分块。询问排序:第一关键字为左端点所在块的编号,第二关键字为右端点编号。回滚莫队:适用于增加或删除操作其中一个复杂度较大,但另一个较小的情况。可以做到只使用一种操作。排序后按照左端点的块编号一块一块做。排完......
  • redis内容记录
    redis的基本数据类型String:是最基本的数据类型,它可以存储任何二进制安全的数据。不仅能存放文本数据,还能保存图片、音频、视频、压缩文件等二进制数据。它们通常用于缓存。Hash:哈希类型,其中键值对中的值本身又是一个键值对结构,hash特别适合用于存储对象。List:Redis列表,一个......
  • 20240924 练习记录
    3个DP,还想了几道题,但不会。*P3349[ZJOI2016]小星星考虑树上的点最终会对应在图上的哪个点,设\(f_{x,i}\)表示树上的点\(x\)对应图上点\(i\)时的方案数,当\(x\)对应\(i\)后,在树上\(x\)的所有子节点也必须像在树上一样,在图上和\(i\)之间有连边,有了这条限制,可以写......
  • 化学套卷练习记录
    目录化学套卷练习记录202412024.9.202024苏州期初——【考试】59/7522024.9.242023年4月石家庄二模——【练习】58化学套卷练习记录202412024.9.202024苏州期初——【考试】59/75【总结】待upd【传送门】https://www.bilibili.com/video/BV15wsme5ELC22024.9.242023......
  • 微信聊天记录恢复最新恢复小技巧!
    微信在日常聊天记录中存有许多重要的数据,如工作文件、转账记录、视频照片等。这些聊天记录既便于日常工作的复盘,也能作为珍贵的聊天记忆保存在微信上。但是,如果我们不小心把微信删了,那聊天记录需要怎样恢复呢?针于对这个问题,在这里小编给大家总结了几点,帮助大家恢复微信聊天记录......