首页 > 其他分享 >单选集

单选集

时间:2024-09-26 23:23:05浏览次数:3  
标签:le int 合法 Maxn 贪心 dp 选集

「CF1943D2」Counting Is Fun (Hard Version)

我们先来等价转换一下合法序列的特征,我们发现,对于任意的\(i,a_i > a_{i -1} + a_{i + 1}\),那么是好的。
必要性是显然的,主要是充分性如何证明,考虑对差分数组求解
那么就是说,对于个一个数列,你每一次需要选择不相邻的两个数同加减,是否能全部变为零,相对而言,前面的优势更大,所以一个贪心的想法是对于每一个正数从前往后的与之后的负数依次抵消。这样的贪心与我们的限制条件是否能够造出一组解呢?
转换一下条件,也即$0 \le a[i - 1] + (a[i + 1] - a[i]) $ 也就是 $ 0 \le (\sum \limits_{1 \le j \le i - 1} d_j) + d_{i + 1} $ ,感性地说,这说明每一个负数之前可用的的正数与负数抵消后都是够用的,按照这个贪心算法即可构造出来一个序列,也即充分性。

基于此,我们有一个基础dp_{i , j , k},表示\(i - 1\)位置 填\(j\), \(i\)位置填\(k\)的方案数,前缀和优化转移即可\(O(n^3)\)解决问题,这也是 easy vision的做法。

下面是个人觉得最神仙的地方,我们继续发掘性质,一个位置不合法也即\(a[i] > a[i - 1] + a[i + 1]\),你会发现,不可能有两个相邻的位置同时不合法,首先缩减dp状态,\(dp_{i , j}\) 表示第\(i\)个位置填了\(j\),前\(i - 1\)已经合法的方案数,我们来填\(i + 1\), 如果\(i + 1\)不合法,那么\(i ,i + 2\)一定合法,我们即可通过\(i\)转移出\(i + 2\)的\(i + 1\)不合法方案,只需算出\(i + 1\)所有方案数即可容斥出合法的方案

#include <bits/stdc++.h>
using namespace std;
const int Maxn = 3003;
int t , n , k , p;
int dp[Maxn][Maxn] , s[Maxn][Maxn] , ss[Maxn][Maxn];
int main() {
    cin >> t;
    while(t--) {
        cin >> n >> k >> p;
        if(n == 1) {
            cout << 1 << '\n';
            continue;
        }
        if(n == 2) {
            cout << k + 1 << '\n';
            continue;
        }
        const int Mod = p;
        for(int i = 0 ; i <= k ; i++) {
            dp[1][i] = 1;
            dp[2][i] = i + 1;
            s[1][i] = dp[1][i];
            s[2][i] = dp[2][i];
            if(i) s[1][i] = (s[1][i - 1] + s[1][i]) % Mod , s[2][i] = (s[2][i - 1] + s[2][i]) % Mod;
            ss[1][i] = s[1][i];
            ss[2][i] = s[2][i];
            if(i) ss[1][i] = (ss[1][i - 1] + ss[1][i]) % Mod , ss[2][i] = (ss[2][i - 1] + ss[2][i]) % Mod;
        }
        for(int i = 3 ; i <= n + 1 ; i++) {
            int tmp = 0;
            for(int j = 0 ; j <= k ; j++) {
                tmp = (tmp + dp[i - 1][j]) % Mod;
            }
            for(int j = 0 ; j <= k ; j++) {
                dp[i][j] = (Mod + tmp - ((k ^ j) ? ss[i - 2][k - j - 1] : 0)) % Mod;
                // printf("(%d %d)[%d %d]\n", i , j , dp[i][j] , ((k ^ j) ? ss[i - 2][k - j - 1] : 0));
            }
            s[i][0] = ss[i][0] = dp[i][0];
            for(int j = 1 ; j <= k ; j++) {
                s[i][j] = (s[i][j - 1] + dp[i][j]) % Mod;
                ss[i][j] = (ss[i][j - 1] + s[i][j]) % Mod;
            }
        }
        cout << dp[n + 1][0] << '\n';
    }
}~~~

标签:le,int,合法,Maxn,贪心,dp,选集
From: https://www.cnblogs.com/Cmr-/p/18434749

相关文章

  • 【五一省选集训day4】Grid Game
    【五一省选集训day4】GridGame首先发现\(n,m\le2000\),可以考虑枚举正方形左上端点\((x_0,y_0)\)。对于一个边长为\(len\)的合法的正方形,如果\(len=k\)这个正方形全黑,需要特判,否则它至少有一个白点。我们惊奇地发现,对于这样的其中一个白点,它所在的那一列一定存在恰好\(......
  • 【五一省选集训day4】Permutation
    【五一省选集训day4】Permutation每次操作把数分成两组,每组内的顺序不变,把第\(0\)组放到第\(1\)组前面。发现这很像基于二进制的基数排序。假设我们进行\(k\)次这样的操作,就相当于给每个数赋一个值\((x,y)\),其中\(0\lex\le2^k-1,y=\texttt{数的下标}\)。然后对第一维......
  • 【五一省选集训day4】Mansion
    【五一省选集训day4】Mansion注意,本题要求输出最大值,不要把最大值看成编号……srds好像只有我看错了。这个东西一看就很能用莫队做。用莫队按\(l\)分块,再按\(r\)排序。维护一棵线段树,每次移动对线段树进行单点修改和区间求\(\max\),一共\(n\sqrt{n}\)次移动,总时间复杂度......
  • 初学者如何快速上手多种AI工具?从零到精通:AI工具新手入门指南与精选集合
    在工作和生活中,我经常使用各种各样的人工智能工具,如AI写作软件、AI语音助手、AI绘图工具等。我发现,这些工具能够极大地提高工作效率并简化日常生活。作为一名AI工具的忠实爱好者,我整理了大量珍贵的AI资源网站,完全适用于国内用户,希望能助你一臂之力,轻松提升你的工作和学习效率,今......
  • 易优cms网站videoplay功能:该标签仅限于视频模型的文档,用于在线播放视频选集列表里的第
    videoplay视频在线播放 [基础用法]名称:videoplay功能:该标签仅限于视频模型的文档,用于在线播放视频选集列表里的第一个视频。    (温馨提示:如果一篇视频文档有多个选集视频,可以同时使用【videolist视频选集列表】标签,进行视频切换播放。)语法:{eyou:videoplayaid='文档ID'......
  • 2024.1 省选集训题单笔记
    CF513E2SubarrayCuts一开始还以为有什么神仙性质,找了半天发现性质不好,要考虑一些暴力点的做法了相邻两段和之差的绝对值,这个限制很难处理我们只能考虑把贡献拆开,如果把每段的位置与和标在一张折线图上,我们发现这张图中的「山峰」产生\(+2\)的贡献,「山谷」产生\(-2\)的贡......
  • Date、Calendar(日历对象)、LocalDateTime三大时间日期类的各种处理方式【精选集】
    Date类:1.1、将字符串型时间日期转化为date类型StringtimeString="2023-11-1709:27:00";SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");//创建"简单时间格式化"对象,格式为:yyyy-MM-ddHH:mm:sstry{D......
  • 2万3千多条英文名言名句精选集ACCESS\EXCEL数据库
    截图下方有显示“共有记录数”,截图包含了表的所有字段列。该数据提供ACCESS数据库文件(扩展名是MDB)以及EXCEL文件(扩展名是XLS)。共有23710条记录,根据AUTHOR_ID关联AUTHORS作者表中的ID字段包含6567个作者,根据ID关联QUOTES表中的AUTHOR_ID字段截图下方有显示“共有记录数”,截图......
  • c# 工业互联网云服务器框架。 集成web api服务,可选集成mqt
    c#工业互联网云服务器框架。集成webapi服务,可选集成mqtt服务器及其它服务器,这套带码是通过C#编写集成IOCP高性能高并发优势服务器服务源码。带手机app测试demo源码具体具备功能如下:1、具备EF6+mssql数据库功能,可更改为MYSQL或SQLITe.2、自带WEBAPI服务,抛弃IIS支持。用户可以通......
  • Solution Set (春测集训中旬至省选集训)
    SolutionSetCF1767FTwoSubtrees首先,考虑询问\(u=v\)的情况,发现需要使用线段树合并,或者分块/莫队。问了一下,可以不用薯粉块啥的。但是9s啊9s,为啥啊为啥。考虑当前\(u\)最小众数是\(x\)(不妨设\(\maxu_x>\maxv_x\))。所以其出现次数是\(p=u_x+v_x\)。若......