首页 > 其他分享 >[ARC127E] Priority Queue 题解

[ARC127E] Priority Queue 题解

时间:2023-04-13 13:58:48浏览次数:39  
标签:Queue 留下 int 题解 kN Priority 必定 考虑

首先我们每次加入的数必定是一个 \(1\sim a\) 的排列,但从排列角度考虑的话非常复杂,因为 \(s\) 是一个集合。所以我们考虑最后能剩下哪些数。

考虑最后剩下的集合为 \(\{a_i\}\),其中 \(a_i<a_{i+1}\),显然这个集合里面的元素个数为 \(A-B\)。

那么我们会发现一件事情:我们按上升序依次留下这些数是最优的。

考虑相邻两个数 \(a_i,a_{i+1}\),若以 \(a_{i+1},a_i\) 的顺序可以留下这些数,那么:

  • 由于 \(a_{i+1}>a_i\),将 \(a_i\) 调到 \(a_{i+1}\) 的位置必定更容易被留下。
  • 由于 \(a_{i+1}\) 出现在 \(a_i\) 前面,因此若 \(a_{i+1}\) 在前面可以被留下,那么放到 \(a_i\) 的位置也必定可以留下。

于是我们最后留下的数必定是有序的,所以我们如果已经确定了前 \(i\) 个数,第 \(i+1\) 个数的下界就对应的被确定了(\(a_i<a_{i+1}\))。因为在一个位置填上小一点的数必定比大一点的数更容易留下,所以 \(a_{i+1}\) 的值域是一段连续的区间,我们只需要知道上界即可。

考虑贪心,我们为了让每一位上的数尽可能的大,肯定要让大的数尽量留在后面,所以按从小到大的顺序依次加数即可。

最后就是一个简单 dp 了。

#include <atcoder/all>
#include <iostream>

using namespace std;
using LL = atcoder::modint998244353;

const int kN = 5001;

int a, b, r[kN], t;
LL f[kN][kN], s[kN][kN];

int main() {
  ios_base::sync_with_stdio(0), cin.tie(0);
  cin >> a >> b;
  for (int i = 1, v, j = 0; i <= a + b; ++i) {
    cin >> v;
    if (v == 1) {
      r[++t] = ++j;
    } else {
      --t;
    }
  }
  f[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) {
      f[i][j] = s[i - 1][j - 1];
      s[i][j] = s[i][j - 1] + f[i][j];
    }
    for (int j = r[i] + 1; j <= a; ++j) {
      s[i][j] = s[i][r[i]];
    }
  }
  cout << s[a - b][r[a - b]].val();
  return 0;
}

标签:Queue,留下,int,题解,kN,Priority,必定,考虑
From: https://www.cnblogs.com/bykem/p/17314495.html

相关文章

  • Grid++Report 锐浪报表开发常见问题解答集锦
    Grid++Report锐浪报表开发常见问题解答集锦,锐浪报表报表对VBAccessC#Delphi支持都非常好,也可用于BS架构。Grid++Report适用于C/S报表与WEB报表(B/S报表)开发桌面报表与WEB报表共享相同的开发知识与资源,大大提高报表开发效率。另特别说明一点,在Access中使用Grid++Report锐浪......
  • 【BUG】ExtJS 的Tab Reorder 插件持续更新布局问题解决办法 (Solution to layout issue
    更新记录2023年4月13日初始化。ExtJS教程汇总:https://www.cnblogs.com/cqpanda/p/16328016.html问题不停的拖动tab栏,会不断更新布局。Draggingthetabbarcontinuouslywillupdatethelayoutconstantly.解决办法进入ExtJS包,打开ux目录下的BoxReorderer.js文件,找......
  • abc247_f Cards 题解
    Cards题意有\(N\)张卡片,每张卡片上都写有两个数字,第\(i\)张卡片上的数字分别为\(P_i,Q_i\)。同时,\(P=(P_1,P_2,\dots,P_N)\)和\(Q=(Q_1,Q_2,\dots,Q_N)\)都是\((1,2,\dots,N)\)的全排列。我们需要在\(N\)张卡片中选出一些卡片,并且\(1,2,\dots,N......
  • 3.【RabbitMQ实战】- 工作队列(Work Queue)
    工作队列(又称任务队列)的主要思想是避免立即执行资源密集型任务,而不得不等待它完成。相反我们安排任务在之后执行。我们把任务封装为消息并将其发送到队列。在后台运行的工作进程将弹出任务并最终执行作业。当有多个工作线程时,这些工作线程将一起处理这些任务。轮询分发消息......
  • 2020计蒜之道预赛第二场-群星 题解
    题目描述蒜头君是一个P社玩家,每天从计蒜客下班回家之后的第一件事情就是打开《群星》,开始继续他的第四天灾之旅。这次他把注意力集中到了银河市场里面。银河市场里面商品的价格都通过以下公式计算:$$P=B*basePrice/S$$$$price=\displaystyle\frac{buy}{sell}*base......
  • 问题解决
    遇到的问题1.解决方法:将@RequestParam改为@PathVariable:@RequestParam接收的是?参数,@PathVariable接收直接参数2.Stream方法报红解决办法:jdk版本改为8版本及以上3.解决方法:导入以下依赖<plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifac......
  • Win7资源管理器自动关闭或者重启问题解决办法
    方法1:故障现象:提示win7资源管理器已停止工作解决办法:1.打开任务管理器,点“文件”,再点”新建任务”,在”打开”后面打上explorer.exe确定2.找到WinRAR,点”选项”,”设置”,”综合”,“把WinRAR整合到资源管理器中”的勾消除就行了方法2故障现象:Windows7出现资源管理器自......
  • 文件系统变成RAW问题解决
    问题描述对于打开分区提示需要格式化的情况,右击属性查看时,文件系统变成了RAW了,没有关系很好恢复,千万不要格式化。问题分析可以看到该分区说明分区表没有问题,这是由于DBR扇区(即启动扇区)损坏造成的。以上听不懂分析没有关系,对你的恢复影响不大。有两种方法恢复:1、用软件自动进......
  • YBTOJ 5.4例3 最长距离 题解
    挂大分!!!!!!1.一定要看清提干有没有多测2.多测不清空爆零两行泪3.同时线性更新最大值和次大值时记得最大值更新要同时把旧的最大值给次大值题解首先可以想到一个最暴力的暴力:对于每一个点暴力枚举所有的点跑LCA复杂度\(O(n^2logn)\)显然会炸然后就有一个优化一点的暴力:......
  • CF698F Coprime Permutation 题解
    题意给定一个未填满的数组\(p\),求有多少种\(1\simn\)的排列\(p\)满足对于任意\(i<j\),都有\([\gcd(i,j)=1]=[\gcd(p_i,p_j)=1]\),答案对\(10^9+7\)取模。题解部分参考这篇题解(感觉这篇题解应该是目前为止最详细的吧)。记\(P\)为\([1,n]\)中所有素数与\(1\)构成......