ARC127E Priority Queue
ARC127E Priority Queue
分析性质+dp。
思路
由于每次加入的数肯定是一个 \(a\) 的排列,但这个角度不好考虑。
设 \(\{a\}\) 为最终状态的集合,其中 \(a_i<a_{i+1}\),显然集合内元素个数为 \(A-B\)。
然后可以发现,按照元素值升序的加入顺序形成最终状态一定是最保险的一种方案。
设 \(a_{i+1},a_i\) 加入的顺序可以形成该最终状态,试交换顺序为 \(a_i,a_{i+1}\)。
因为 \(a_i<a_{i+1}\) 所以 \(a_i\) 可以留下。
因为 \(a_{i+1},a_i\) 的顺序可以形成最终状态,所以 \(a_i,a_{i+1}\) 也可以形成最终状态。
所以如果乱序加入的状态可以留下 \(a_i,a_{i+1}\),那么升序加入一定可以留下。
那么我们可以发现,最后留下的顺序是升序的,就可以考虑 \(dp\)。
设 \(dp[i][j]\) 为目前已经放了 \(i-1\) 个数,第 \(i\) 个数放 \(j\) 的状态数。
有转移:
\]
可以用前缀和优化转移,时间复杂度 \(O(n^2)\)。
CODE
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mod 998244353
const int maxn=5005;
int n,a,b,t,m;
int r[maxn];
ll dp[maxn][maxn],s[maxn][maxn];
int main()
{
scanf("%d%d",&a,&b);
for(int i=1;i<=a+b;i++)
{
int x;
scanf("%d",&x);
if(x==1) r[++t]=++m;
else t--;
}
dp[0][0]=1;
for(int i=0;i<=a;i++) s[0][i]=1;
for(int i=1;i<=a-b;i++)
{
for(int j=1;j<=r[i];j++)
dp[i][j]=s[i-1][j-1],s[i][j]=(dp[i][j]+s[i][j-1])%mod;
for(int j=r[i]+1;j<=a;j++) s[i][j]=s[i][r[i]];
}
printf("%lld",s[a-b][r[a-b]]);
}
ARC127E Priority Queue的更多相关文章
- STL-<queue>-priority queue的使用
简介: 优先队列是一种容器适配器,优先队列的第一个元素总是最大或最小的(自定义的数据类型需要重载运算符).它是以堆为基础实现的一种数据结构. 成员函数(Member functions) (const ...
- 优先队列(Priority Queue)
优先队列(Priority Queue) A priority queue must at least support the following operations: insert_with_pr ...
- Objective-C priority queue
http://stackoverflow.com/questions/17684170/objective-c-priority-queue PriorityQueue.h // // Priorit ...
- 《Algorithms 4th Edition》读书笔记——2.4 优先队列(priority queue)-Ⅴ
命题Q.对于一个含有N个元素的基于堆叠优先队列,插入元素操作只需要不超过(lgN + 1)次比较,删除最大元素的操作需要不超过2lgN次比较. 证明.由命题P可知,两种操作都需要在根节点和堆底之间移动 ...
- 《Algorithms 4th Edition》读书笔记——2.4 优先队列(priority queue)-Ⅳ
2.4.4 堆的算法 我们用长度为 N + 1的私有数组pq[]来表示一个大小为N的堆,我们不会使用pq[0],堆元素放在pq[1]至pq[N]中.在排序算法中,我们只能通过私有辅助函数less()和 ...
- 《Algorithms 4th Edition》读书笔记——2.4 优先队列(priority queue)-Ⅰ
许多应用程序都需要处理有序的元素,但不一定要求他们全部有序,或者是不一定要以此就将他们排序.很多情况下我们会手机一些元素,处理当前键值最大的元素,然后再收集更多的元素,再处理当前键值最大的元素.如此这 ...
- 什么是优先级队列(priority queue)?
有时候我们需要在某个元素集合中找到最小值和最大值 .优先级队列抽象数据(Priority Queue ADT)模型是我们能够使用的方法之一,这是一种支持插入和删除最小值(DeleteMin)或者最大值 ...
- 优先队列Priority Queue和堆Heap
对COMP20003中的Priority queue部分进行总结.图片来自于COMP20003 queue队列,顾名思义特点先进先出 priority queue优先队列,出来的顺序按照优先级prio ...
- STL之heap与优先级队列Priority Queue详解
一.heap heap并不属于STL容器组件,它分为 max heap 和min heap,在缺省情况下,max-heap是优先队列(priority queue)的底层实现机制.而这个实现机制中的m ...
- Priority Queue
优先队列 集合性质的数据类型离不开插入删除这两操作,主要区别就在于删除的时候删哪个,像栈删最晚插入的,队列删最早插入的,随机队列就随便删,而优先队列删除当前集合里最大(或最小)的元素.优先队列有很多应 ...
随机推荐
- Game on Sum--组合数学--DP
\(Codeforces-Round 767\) (Div. 2) F2. \(Game \ on \ Sum\) \(HERE\) 题意 \(QZS\) 和 \(HANGRY\) 玩游戏. 游戏共有 ...
- win指令学习收集
要执行多句,需要用到逻辑判断 1 & 2 1成不成功都会执行2 1 && 2 1成功才会执行2 1 || 2 1不成功才会执行2
- 2024年智能革命:HarmonyOS NEXT与盘古大模型5.0的颠覆性融合
引言 2024年,这一年注定在全球智能设备市场的历史上写下浓墨重彩的一笔.作为全球科技巨头,华为再次以其前瞻性的布局,推动了技术与应用的深度融合.在这个充满变革的时代,华为通过不断扩展的鸿蒙生态系统, ...
- how to log iptables events
warning level: iptables -A INPUT -j LOG --log-prefix "BAD_INPUT: " --log-level 4 iptables ...
- Mongodb入门5
最近在用MongoDBKoa2做个小项目,记录一下: 首先,如何连接线上数据库: const url = `mongodb://user:pwd@ipaddr:27017/Blog`; const m ...
- SQL Server – Schema
前言 久仰 dbo 大名, 但是一直没有认真去看它有啥作用. 今天翻看了一下 SQL Server sample database: AdventureWorks2019, 发现它用了许多 Schem ...
- CF228E 题解
CF228E 题解 题目简述 给定一个 \(n\) 个点,\(m\) 条边的无向图,每条边都为 \(0\) 或 \(1\),可以进行若干次操作,与此点相连的所有点权值取反,求一种方案使得所有边都变为 ...
- JSON——简介
JSON--简介 JSON--基础语法 JSON--json数据与java对象的转换 // 将java对象转为json字符串 User user = new User(1,&q ...
- foobar2000 v1.6.11 汉化版(更新于 2022.08.25)
foobar2000 v1.6.11 汉化版 -----------------------[软件截图]---------------------- -----------------------[软 ...
- USB设备类型代码、详细说明、查询方式
以下是相关类型的详细说明: 地址:https://www.usb.org/documents 搜索device class 以下是USB所有支持的设备类型代码 地址:http://www.usb.or ...