Problem

考察算法:\(DP\)。

题目简述

给你 \(n\) 个点,每个点有一个坐标 \((x_i,y_i)\),还可以添加 \(k\) 个点。

添加之后,求:最长的上升点列的长度。

上升点列定义(两个点满足其中之一即可):

  • \(x_{i+1}-x_{i} = 1,y_i = y_{i + 1}\)
  • \(y_{i+1} - y_{i} = 1,x_i = x_{i + 1}\)

思路

设二维数组 \(f[i][j]\) 表示以第 \(i\) 个坐标结尾,增加 \(j\) 个点后最长上升点列的长度。

边界条件

如果每个点不和其他任何点连接,添加 \(j\) 个点后,上升点列的长度也最少是 \(j + 1\)。

注意:\(j\) 的循环范围是 \(0 \to k\)。

$ f[i][j] = j + 1$。

状态转移方程设计

设变量 \(t\) 为当前枚举到的左下方的点(状态的转移只能来自左下方),变量 \(c\) 为如果要连接 \(i\) 点和 \(t\) 点,最少要添加多少个点。

变量 \(c\) 如何计算:曼哈顿距离。\(c = (x_i-x_t) + (y_i - y_t) - 1\)。

所以:\(f_{i,j} = \max(f_{i,j}, f_{t,j - c} + c + 1)\)

因为如果要添加 \(c\) 个点,\(t\) 点只能添加 \(j - c\) 个点,然后加上添加的 \(c\) 个点再加一,就能得到上升点列的长度。

代码

#include <bits/stdc++.h>

using namespace std;

const int N = 510;
struct node{
int x, y;
} a[N];
int n, k, f[N][N]; bool cmp(node n1, node n2) {
return n1.x < n2.x || (n1.x == n2.x && n1.y < n2.y);
} int main() {
scanf("%d%d", &n, &k);
for (int i = 1; i <= n; i++) scanf("%d%d", &a[i].x, &a[i].y);
sort(a + 1, a + n + 1, cmp);
for (int i = 1; i <= n; i++) {
for (int j = 0; j <= k; j++) {
f[i][j] = j + 1;
}
}
int c;
for (int i = 2; i <= n; i++) {
for (int t = 1; t < i; t++) {
if (a[t].y > a[i].y) continue;
c = a[i].x - a[t].x + a[i].y - a[t].y - 1;
for (int j = c; j <= k; j++)
f[i][j] = max(f[i][j], f[t][j - c] + c + 1);
}
}
int ans = 0;
for (int i = 1; i <= n; i++) ans = max(ans, f[i][k]);
printf("%d", ans);
return 0;
}

P8816 [CSP-J 2022] 上升点列的更多相关文章

  1. CSP J/S 初赛总结

    CSP J/S 初赛总结 2021/9/19 19:29 用官方答案估计 J 涂卡的时候唯一的一支 2B 铅笔坏了,只能用笔芯一个个涂 选择 \(-6\ pts\) 判断 \(-3\ pts\) 回答 ...

  2. 【游记】CSP J/S 2019 游记

    J 组 \(2:30\)开始, \(2:13\)还在酒店的我看了看手表...飞奔考场. T1 数字游戏 秒切. 下午某中学某大佬说可用线性基(%) T2 公交换乘 用单调队列思想,秒切. T3 纪念品 ...

  3. CSP/S 2022 游寄

    初赛 HN 初赛分数线好像大 \(32\) 分左右,通过率极高!本人弱弱的拿了 \(60.5\) 分(周围的同学平均分 \(>80\).) Day -1 这一天晚上,我背了背 dijkstra, ...

  4. 2019 CSP J/S第2轮 视频与题解

    CSP入门组和提高组第二轮题解 转自网络

  5. CSP J/S 2019受虐记

    一枚蒟蒻的游记~ 提高组DAY1 不是说每场考试都有一道签到题吗 那我tm读了三遍题硬是没找到一道水题是怎么回事(是我太弱了吗) 没办法,硬着头皮做T1 暴力写法...期望得分30pts 于是...在 ...

  6. [ 赛后总结 ] CSP-J 2022

    前言 今年没考好,估分 100+60+0+10=170pts ,大概能混个2=,没什么用. 这下好了,期中也砸了,已经排到全校 30 开外了,果然鱼和熊掌不可兼得,况且我双双落空,接下来怕是想搞也搞不 ...

  7. 2022 CSP-J 游记

    Day − ∞ -\infty −∞ 在家里跟父母约定 "只要csp-j一等奖,手机随你挑!" 对于一个没有手机的初中生废物,这个约定显然勾引了我 刷题! 刷题! 再刷! 刷废-- ...

  8. [游记]2020/CSP - S总结

    2020 / C S P − S 总 结 2020/CSP - S总结 2020/CSP−S总结 这年的 C S P CSP CSP考的不是很理想,本来稳进的 C S P − J CSP-J CSP− ...

  9. CSP2022 J2参考解析

    目录 P8813 [CSP-J2022] 乘方 P8814 [CSP-J2022] 解密 P8815 [CSP-J2022] 逻辑表达式 P8816 [CSP-J2022] 上升点列 题目传送: P8 ...

  10. emacs考场短配置

    (set-background-color "gray15") (set-foreground-color "gray") ;;设置颜色 (global-set ...

随机推荐

  1. 【IDEA】 远程调试

    远程调试 使用特定JVM参数运行服务端代码 要让远程服务器运行的代码支持远程调试,则启动的时候必须加上特定的JVM参数,这些参数是: -Xdebug -Xrunjdwp:transport=dt_so ...

  2. 【转载】Linux虚拟化KVM-Qemu分析(八)之virtio初探

    原文信息 作者:LoyenWang 出处:https://www.cnblogs.com/LoyenWang/ 公众号:LoyenWang 版权:本文版权归作者和博客园共有 转载:欢迎转载,但未经作者 ...

  3. 用 Golang 从0到1实现一个高性能的 Worker Pool(一) - 每天5分钟玩转 GPT 编程系列(3)

    目录 1. 概述 2. 设计 2.1 让 GPT-4 给出功能点 2.2 自己总结需求,再给 GPT 派活 3. 实现 3.1 你先随意发挥 3.2 你得让 Worker 跑起来呀 3.3 你说说 P ...

  4. 河南省第十四届icpc大学生程序设计竞赛-clk

    这次比赛赛程比较长,520出发,521,回学校,出发的那一天有点热,感觉不是很好,而且那一天感觉有点生病,应该只是普通感冒,热身赛的时候被oier吊打,省实验真厉害,晚上回酒店后,我喊队友,补了前年的 ...

  5. Asp.Net MVC中Action跳转小结(转载)

    来源: https://www.cnblogs.com/surfing/p/3542826.html 首先我觉得action的跳转大致可以这样归一下类,跳转到同一控制器内的action和不同控制器内的 ...

  6. Kernel panic 堆栈信息怎么看

    Kernel panic 是指 Linux 内核遇到了无法继续执行的致命错误,此时会在屏幕上输出一些错误信息,其中就包括堆栈信息.堆栈信息是指发生错误时 CPU 执行的代码路径,可以通过堆栈信息来定位 ...

  7. 关于 Llama 2 的一切资源,我们都帮你整理好了

    Llama 2 是一个由 Meta 开发的大型语言模型,是 LLaMA 1 的继任者.Llama 2 可通过 AWS.Hugging Face 获取,并可以自由用于研究和商业用途.Llama 2 预训 ...

  8. 深入理解MySQL:数据类型、查询优化、索引、事务处理和数据备份与恢复

    摘要: MySQL 是一种常用的关系型数据库管理系统,对于开发者和数据库管理员来说,掌握 MySQL 的关键概念和最佳实践非常重要.本文将围绕 MySQL 的数据类型.查询优化.索引.事务处理以及数据 ...

  9. Cookies 完全指南

    我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品.我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值. 本文作者:佳岚 前言 Cookie实际上是一小段的文本信息,它产生的 ...

  10. ETL之apache hop系列2-hop web安装和入门

    前言 在Docker安装apache hop 首先确保Docker已经安装和运行Java 11 JDK 安装文档参考:https://blog.csdn.net/Chia_Hung_Yeh/artic ...