首页 > 其他分享 >[刷题笔记] CSP-J 2022 T4 上升点列

[刷题笔记] CSP-J 2022 T4 上升点列

时间:2023-10-16 23:11:05浏览次数:56  
标签:include 个点 int T4 添加 2022 序列 上升 CSP

Description

在一个二维平面内,给定 \(n\) 个整数点 \((x_i, y_i)\),此外你还可以自由添加 \(k\) 个整数点。

你在自由添加 \(k\) 个点后,还需要从 \(n + k\) 个点中选出若干个整数点并组成一个序列,使得序列中任意相邻两点间的欧几里得距离恰好为 \(1\) 而且横坐标、纵坐标值均单调不减,即 \(x_{i+1} - x_i = 1, y_{i+1} = y_i\) 或 \(y_{i+1} - y_i = 1, x_{i+1} = x_i\)。请给出满足条件的序列的最大长度。

评测地址:https://www.luogu.com.cn/problem/P8816

Analysis

先考虑最简单的情况,当 \(k=0\) 时,我们只在题目已知的点中选,这就是一个 最长上升子序列问题。处理到这里可以获得 40 pts 的好成绩。

对于可以添加点的情况,解题的大方向还是 最长上升子序列模型。对于 \(\forall a_i,a_j\),不妨枚举在他们中间添加点的个数。设 \((x_1,y_1),(x_2,y_2)\) 表示当前处理的点,若合法,我们显然至少需要添加 \(x_2-x_1+y_2-y_1\) 个点才能符合题意(这里合法指单调上升。)

形式化地,设 \(f_{i,K}\) 表示前 \(i\) 位,已经添加了 \(K\) 个点时的最长上升子序列长度,则满足:

\[f_{i,K}=max(f_{i,K},f_{j,K-t}+t+1) \]

(\(t=(x_2-x_1+y_2-y_1)\))

至于预处理,初始化使得 \(f_{i,K}=K+1\)(别忘了加上本身)

分析完毕,代码如下:

Code

#include <iostream>
#include <cstdio>
#include <algorithm>
#define x first 
#define y second
using namespace std;
const int N = 10010;
typedef pair<int,int> PAIR; 
int n,k;
PAIR a[N];
int f[N][N];
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin>>n>>k;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i].x>>a[i].y;
    }
    sort(a+1,a+n+1);

    for(int i=1;i<=n;i++)
    {
        for(int j=0;j<=k;j++)
        {
            f[i][j] = j+1;
        }
    }
    for(int i=2;i<=n;i++)
    {
        for(int j=i-1;j>=1;j--)
        {
            if(a[j].y > a[i].y) continue; //不满足单调上升
            int dist = a[i].x - a[j].x + a[i].y-a[j].y-1;
            for(int p = dist;p <= k;p ++)
            {
                f[i][p] = max(f[i][p],f[j][p-dist]+dist+1); //枚举添加点的数量
            }
        }
    }
    int ans = 0;
    for(int i=1;i<=n;i++) ans = max(ans,f[i][k]);
    cout<<ans<<endl;
    return 0;
}

标签:include,个点,int,T4,添加,2022,序列,上升,CSP
From: https://www.cnblogs.com/SXqwq/p/CSP-J-2022-T4.html

相关文章

  • GODOT4 按键重映射
    创建按钮创建Button节点,勾选属性Togglemode创建脚本在按钮上创建gb脚本在脚本中键入如下代码:@exportvaraction:String="ui_accept"#要重映射的动作名称[项目设置->输入映射]中的名称在gb脚本的_ready()方法中键入如下代码:func_ready(): #set_focu......
  • CSP-J/S 2023 游记
    2023-10-16TBXCRound7-J打了场模拟赛,以为自己AK了,结果赛中发现自己是消愁,调完代码后又以为自己AK了,赛后再次发现自己是消愁。半年没写bfs,只会SPFA了/cf总结:数组空间不要开小!......
  • 2023年CSPM-3国标项目管理中级认证备考开始啦!
    CSPM-3中级项目管理专业人员评价,是中国标准化协会(全国项目管理标准化技术委员会秘书处),面向社会开展项目管理专业人员能力的等级证书。旨在构建多层次从业人员培养培训体系,建立健全人才职业能力评价和激励机制的要求,培养我国项目管理领域复合型人才。  【证书含金量】 ·竞聘优先......
  • CSP-S 大纲
    CPS-S大纲2.2.1基础知识与编程环境【5】Linux系统终端中常用的文件与目录操作命令【5】Linux系统下常见文本编辑工具的使用【5】g++、gcc等编译器与相关编译选项【5】在Linux系统终端中运行程序,使用time命令查看程序用时【5】......
  • 还不会在MT4用Renko,FPmarkets澳福手把手教你一分钟学会
    很多投资者还不会在MT4上使用Renko,让FPmarkets澳福通过一个具体的例子来探讨,Renko图表指标在MT4平台上的应用,以AG Renko为例。首先,投资者需要解压缩下载的档案,并将其移动到MT4的“指标”文件夹中。重启MetaTrader交易平台后,所添加的工具就会出现在指标列表中。若要将AG Renko添加......
  • 考场(CSP模拟56联测18 )
    T1难道是。。。。淀粉质????这不是CSP-S模拟吗,哪来的淀粉质QAQ。不确定,再想想T2可以用矩阵快速幂优化一下,然后就拿到暴力分了。。。T3可以写\(N^2\)暴力,所以\(N^2\)暴力的分在哪??!!!,只有\(1e4\),完蛋了,没有暴力T2(重复1)再去看看\(T2\)吧。再次看\(T2\)用个屁矩阵快速幂,,直接......
  • [CSP-S2019] 树的重心 题解
    [CSP-S2019]树的重心因为这道题令我十分兴奋,所以来写一下做完后的思考。这道题用到了树的重心的种种性质,在写解法的时候会一一点出其用处。首先,枚举每一条边,然后各自\(O(n)\)扫一次的\(O(n^2)\)做法是简单的。那么接下来,就会出现不同的解法了:优化\(O(n)\)求解的过程......
  • Origin 2022 中文版 下载及安装教程!
    软件介绍:Origin是由OriginLab公司开发的一个科学绘图、数据分析软件,支持在MicrosoftWindows下运行。Origin支持各种各样的2D/3D图形。Origin中的数据分析功能包括统计,信号处理,曲线拟合以及峰值分析。Origin中的曲线拟合是采用基于Levernberg-Marquardt算法(LMA)的非线性最小二乘法拟......
  • Adobe Prelude 2022「Pl视频编辑软件」中文直装汉化版下载与安装
    AdobePrelude2022是一个超级好用的视频剪辑软件,软件功能非常齐全,可随时对视频进行剪辑操作,用时可对各种视频进行剪辑,增加各种音效,以及使用素材,在用户的使用中可以打开强大的后期操作,如果需要视频剪辑,就可以直接下载AdobePrelude2022汉化版,该剪辑只需添加所需的文字特征,动作改编......
  • Media Encoder 2022「视频与音频编码工具」免激活直装汉化版下载
    MediaEncoder是由Adobe公司开发的一款专业的视频和音频转码工具,可以将几乎所有格式的媒体文件转换为其他格式而无需重新导出视频或音频剪辑。 软件地址:看置顶贴AdobeMediaEncoderCC2022怎么使用对文件进行编码时,AdobeMediaEncoder中有五个主面板可供使用。您可以将面板作......