首页 > 其他分享 >题解 P8816 [CSP-J 2022] 上升点列

题解 P8816 [CSP-J 2022] 上升点列

时间:2023-08-23 20:12:49浏览次数:43  
标签:P8816 个点 int 题解 枚举 添加 2022 CSP

P8816 [CSP-J 2022] 上升点列

题目大意

给定 \(n\) 个点,你可以任意添加 \(k\) 个点,从中选择若干点使得序列中任意相邻两点间的欧几里得距离恰好为 \(1\) 而且横坐标、纵坐标值均单调不减 。换言之,求二维最长上升子序列。

solution:

很容易想到动态规划,根据最长上升子序列的套路,可以枚举点 \(i\) ,再枚举之前出现的点 \(j\) ,计算距离 \(d\) ,判断是否可以添加 \(d\) 个点使得连在一起。此时就需要已经添加的点的个数 \(k\) 。那么不妨枚举到 \(i\) 点,已经添加的点的个数 \(k\) 。那么状态转移方程为:

\[f_{i,k}=\text{max}(f_{i,k},f_{j,k-d}+d+1) \]

细节处理:

  1. 排序 \(x\) 优先,其次 \(y\) 。
  2. 对于枚举 \(k\) 的初始化,易知可以直接在前添加 \(k\) 个点。
代码summary>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=550;
int f[N][N];
struct node{
	int x,y;
}p[N];
bool em(node a,node b){
	if(a.x!=b.x) return a.x<b.x;
	return a.y<b.y;
}
int main(){
	int n,K; scanf("%d%d",&n,&K);
	for(int i=1;i<=n;i++)
		scanf("%d%d",&p[i].x,&p[i].y);
	sort(p+1,p+n+1,em);
	for(int i=1;i<=n;i++){
		for(int k=0;k<=K;k++){
			f[i][k]=k+1;
			for(int j=1;j<i;j++){
				if(p[j].x>p[i].x||p[j].y>p[i].y) continue;
				int d=p[i].x-p[j].x+p[i].y-p[j].y-1;
				if(k<d) continue;
				f[i][k]=max(f[i][k],f[j][k-d]+d+1);
			}
		}
	}
	int ans=0;
	for(int i=1;i<=n;i++){
		for(int k=0;k<=K;k++){
			ans=max(ans,f[i][k]);
		}
	}
	printf("%d",ans);
	return 0;
}

End

题外话:

回归的第一篇题解。
好久不写博客,略显手生。

标签:P8816,个点,int,题解,枚举,添加,2022,CSP
From: https://www.cnblogs.com/TSZ-think/p/17652659.html

相关文章

  • P1830题解
    思路:利用桶存储轰炸区域,双重循环。在存储轰炸区域时将次数刷新,也就是pos[j][k]=i;。下面是核心代码:for(inti=1;i<=x;i++){ intx1,x2,y1,y2; cin>>x1>>y1>>x2>>y2; for(intj=x1;j<=x2;j++) { for(intk=y1;k<=y2;k++) { vis[j][k]++; pos[j][k]=i; } }......
  • CF1820 & 1819 题解
    Div2A答案取决于_连续段长度,有一些细节,比如什么时候答案要加一减一,以及字符串是单独的^。Div2B首先先把全\(1\)串给特判掉。记将字符串视为首位相接的环的时,最大\(1\)连续段长度为\(x\),答案为\({\lfloor{x+1\over2}\rfloor}({\lfloor{x\over2}\rfloor+1})\)......
  • CF1681E Labyrinth Adventures 题解
    题意有一个\(n\timesn\)的方格图,坐标编号类似平面直角坐标系,左下角为\((1,1)\)。这个方格图被分成了\(n\)层,左下角\((1,1)\)为第一层,随后每层都向外拓展一圈,如下图就是\(n=5\)的时候的情况:层与层之间有墙隔开,但每层都有两个门,分别分布在该层顶部和右侧,门是双向的......
  • h5页面开发常见问题解决方案,助你快速排除问题
    h5页面作为目前广告、宣传以及用户交互的重要工具之一。但是在开发的过程中往往会遇到一些问题,比如兼容性、性能、布局等方面的常见问题。下面,广州名锐讯动将介绍一些h5页面开发常见问题并提供解决方案,帮助您快速排除问题。1.兼容性问题当我们在不同设备和浏览器操作时,h5页面可能......
  • 国标GB28181视频平台EasyGBS国标平台无法正常启动的问题解决方案
    EasyGBS国标视频云服务是基于国标GB/T28181协议的视频能力平台,可实现的视频功能包括:实时监控直播、录像、检索与回看、语音对讲、云存储、告警、平台级联等功能。平台部署简单、可拓展性强,支持将接入的视频流进行全终端、全平台分发,分发的视频流包括RTSP、RTMP、FLV、HLS、WebRTC......
  • Spring Boot通过企业邮箱发邮件被Gmail退回的问题解决方法
    这两天给我们开发的Chrome插件:Youtube中文配音增加了账户注册和登录功能,其中有一步是邮箱验证,所以这边会在SpringBoot后台给用户的邮箱发个验证信息。如果发邮件,之前的文章教程里就有,这里就不说了,着重说说这两天发现所有用Gmail注册的用户都被退件的问题。报错现象先来看看具体......
  • 牛客七夕比赛 题解
    标准的算法竞赛题有下面几个,写这篇博客主要是这个M很有意思,一直没绕过来这个弯如果你有更牛逼的构造方法欢迎交流指导。B构造边长为\(n\)的矩阵,使得每个\(2\times2\)的子矩形的权值和的极差最小两个指针L=1,R=\(n^2\)。将网格黑白染色后按照顺序遍历,黑色填\(R\)......
  • LeetCode 算法题解之 26 进制转换 All In One
    LeetCode算法题解之26进制转换AllInOne26进制转换171.ExcelSheetColumnNumber171.Excel工作表列号functiontitleToNumber(columnTitle:string):number{//如何动态生成字典✅26进制//A-Z->1-26conststrs='ABCDEFGHIJKLMNOPQRSTUVWXYZ';......
  • Google Chrome和ChromeDriver版本号不一致问题解决
    1(base)kaka@KakadeMBPbin%/Applications/Google\Chrome.app/Contents/MacOS/Google\Chrome--version2GoogleChrome116.0.5845.963(base)kaka@KakadeMBPbin%chromedriver--version4ChromeDriver114.0.5735.16(7e1ff058633f5b79b1cd7479aca585ba385......
  • error LNK2019: 无法解析的外部符号 (VS2022创建QT文件)
    运行过程中,编译没有问题,但是在输出会显示以下问题 同时出现errorLNK2001、2019、1120,查询网上一些资料得知是链接过程中出现错误:属于的类型是包含符号定义的目标文件或库未链接。由于使用VS2022上拓展的工具QTVSTools创建的QT文件,在使用以下两个头文件:#include"QtNetWor......