首页 > 其他分享 >[NOIP 2024 模拟2]数组操作

[NOIP 2024 模拟2]数组操作

时间:2024-09-12 19:51:11浏览次数:11  
标签:suf NOIP int max 2024 数组 区间 操作 dp

[NOIP 2024 模拟2]数组操作

题意

有 \(n + 2\) 个整数 \(a_0, a_1, . . . , a_n, a_{n+1}\),\(a_0 = a_{n+1} = 0\)。你需要做确切地 \(n\) 次操作,每次数组操作为以下形式: 选择一个整数 \(x\) 满足 \(a_x \ne 0\),使得 \(a_x = 0\),令 \(l=\max_{i<x,a_i=0} i,r=\min_{i>x,a_i=0} i\),此次操作的花费为 $\max(a_l, a_{l+1}+, . . . , a_{x−1}) + \max(a_{x+1}. . . , a_{r−1}, a_r) $牛币。 有多少不同的操作方式使得操作花费的牛币最少,两种操作不同当且仅当两种操 作的操作序列不同。 答案对 \(998244353\) 取模。

思路

发现把一个位置变成 \(0\) 后左右两部分就没有关系了,可以使用区间 dp。

定义 \(f_{i,j}\) 表示操作区间 \([i,j]\) 的最小代价,\(g_{i,j}\) 表示操作区间 \([i,j]\) 代价最小的方案数。

\(f_{i,j} = \min(f_{i,k-1}+f_{k+1,j}+\max_{i\le t<k}a_t+\max_{k< t\le j} a_t)\)

\(g_{i,j}=\sum_{k\rightarrow (i,j)} g_{i,k-1}\times g_{k+1,j} \times C_{j-i}^{k-i}\)

第一个转移方程显然。第二个转移方程的 \(C_{j-i}^{k-i}\) 表示这个区间还剩下 \(j-i\) 个操作(按顺序),分 \(k-i\) 个给左边,剩下的给右边,所以 \(C_{j-i}^{j-k}\) 也正确。可能会有疑问,只确定了哪些操作给左边,哪些操作给右边,但内部的顺序没有确定啊?实际上,虽然区间 dp 是从小区间合并成大区间,但实际操作时是从大区间分成小区间,这里只用确定哪些分给左边,哪些分给右边,它们内部的顺序它们自己分的时候会确定好。

代码

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int mod = 998244353;
const int N = 2e3 + 5;
int n, a[N], pre[N], suf[N];
ll cnt[N][N], dp[N][N], c[N][N];
void solve() {
	cin >> n;
	for (int i = 1; i <= n; i ++) cin >> a[i];
	c[0][0] = 1;
	for (int i = 1; i <= n; i ++) {
		c[i][0] = 1;
		for (int j = 1; j <= n; j ++) {
			c[i][j] = c[i - 1][j] + c[i - 1][j - 1];
			c[i][j] %= mod;
		}
	}
	for (int i = 0; i <= n + 1; i ++) 
		for (int j = 0; j <= n + 1; j ++) cnt[i][j] = 1;
	for (int k = 1; k <= n; k ++) {
		for (int i = 1; i <= n; i ++) {
			int j = i + k - 1;
			if (j > n) break;
			pre[i - 1] = 0, suf[j + 1] = 0;
			for (int t = i; t <= j; t ++) pre[t] = max(pre[t - 1], a[t]);
			for (int t = j; t >= i; t --) suf[t] = max(suf[t + 1], a[t]);
			dp[i][j] = 1e9, cnt[i][j] = 0;
			for (int t = i; t <= j; t ++) 
				dp[i][j] = min(dp[i][j], dp[i][t - 1] + dp[t + 1][j] + pre[t - 1] + suf[t + 1]);
			for (int t = i; t <= j; t ++) 
				if (dp[i][t - 1] + dp[t + 1][j] + pre[t - 1] + suf[t + 1] == dp[i][j]) 
					cnt[i][j] += cnt[i][t - 1] * cnt[t + 1][j] % mod * c[j - i][j - t] % mod, cnt[i][j] %= mod;
		}
	}
	cout << cnt[1][n] << "\n";
}
signed main() {
	freopen("arr.in", "r", stdin);
	freopen("arr.out", "w", stdout);
	int Case = 1;
//	cin >> Case;
	while (Case --)
		solve();
	return 0;
}

标签:suf,NOIP,int,max,2024,数组,区间,操作,dp
From: https://www.cnblogs.com/maniubi/p/18410934

相关文章

  • 2024825XCPC2024模拟赛
    背景QY可爱。榜三。正文记得上次打ICPC赛制还是在上一次。而且这次是IOI赛制,所以没有罚时哈哈哈哈哈哈哈。T1概率期望,但是只用了定义。\(\mathcal{O}(1)\)小式子一推,\(6\min\)过掉。T2直接上难度。发现两个字符串按照前缀和后缀分别删除元素以后得到的两个端点之间......
  • 明天见!2024WAIC产业数据要素流通与应用论坛诚邀莅临
    7月6日下午,2024WAIC产业数据要素流通与应用论坛将于在上海世博中心430会议室举办。诚邀您莅临,聚焦数字科技最新成果,强化高水平数字化支撑,见证多项重磅成果发布,共同推动数据要素市场发展!  重磅嘉宾亮相  ......
  • 从产业区块链到产业数据空间,构建数据价值释放关键引擎 | 林乐博士在2024WAIC产业数据
    7月6日,2024WAIC零数科技产业数据要素流通与应用论坛将于在上海世博中心430会议室成功举办。零数科技创始人兼CEO林乐博士代表主办方致辞,并表示,数据市场已全面启航,数据流通基础设施是构建数据价值释放关键引擎;从产业区块链,到产业数据空间,再到金融数据空间,零数科技正式推出零数可信数......
  • 2024.09.08小红书
    1.机器人走网格小红书的冒险家们!今天,我们要进入一个充满挑战的高科技迷言。这是一张由小红书科技部最新研发的网格地图,每个格子都营着秘密一它们内置了自动滑行带!这些滑行带会让所有进入它们的机器人自动翻一个特定方向滑行。网格地图每个格子都藏着秘密一它们内置了自动滑行......
  • [2024-9-12]如何在Z-Library中免费下载书籍讲解流程
    无不良引导,共享知识,书籍乃进步阶梯。一、登录官网https://z-lib.io/按要求进行注册。二、下载Discordhttps://discord.com/经过我的测试网页版应该是没有注册功能的,先下载再注册。三、免费下载书籍搜索图书,点击索取此书。 然后接受邀请,转到help,帮助内容如下:1)H......
  • 数据要素市场如何发展?2024WAIC零数科技这场论坛干货满满!
    7月6日,2024WAIC零数科技产业数据要素流通与应用论坛于上海世博中心430会议室成功举办。本次论坛由中国发展战略学研究会数字经济战略专委会主办,中国发展战略学研究会数字经济战略专委会、上海零数科技有限公司联合承办。作为2024WAIC重要分论坛之一,论坛以“激活数据要素×,筑基新质......
  • 2024 上海CCPC
    The2024ShanghaiCollegiateProgrammingContest补题连接:https://codeforces.com/gym/105229M.不共戴天观察样例2,注意到6个荷叶两两分成一组,共分为3组(1,2)(3,4)(5,6)其中对于青蛙的策略是组内全部连接,即:m=3:1->2,3->4,5->6鸟的策略是,相邻组相连,即:m=4:1->3,2->4,3->5,4->6猜......
  • 2024年9月11日(k8s环境配置)
    编号主机名称ip1k8s-master192.168.8.2022k8s-node1192.168.8.2033k8s-node2192.168.8.204 1、做免密[root@k8s-master~]#ssh-keygen[root@k8s-master~]#[email protected][root@k8s-master~]#[email protected]、yum源(三台主......
  • 2024年9月12日(k8s环境及测试 常用命令)
    一、环境准备及测试1、报错处理:kube-systemcalico-node-5wvln0/1Init:0/3016hkube-systemcalico-node-d7xfb0/1Init:0/3016hkube-system......
  • solidworks案例3-20240910
    使用到的命令:扫描,薄壁特征,等距实体......