首页 > 其他分享 >[CSP-J 2022] 上升点列(DP)

[CSP-J 2022] 上升点列(DP)

时间:2024-10-29 19:18:32浏览次数:7  
标签:node && 个点 temp int long 2022 CSP 点列

题目传送门

解题思路

首先先讲这些点按照 x 从小到大排序。

然后,很容易想到设 f(i,j) 表示到第 i 个点已经放了 j 个点的最长上升序列的长度。

所以,我们可以从前面的点转移(注意要判断一下 y 是否符合,因为我们只按照了 x 排序);

于是,手推一下可以整出这样一个转移方程:

f(i,j)=\max(f(k,j-(x_i-x_k+y_i-y_k+1))+x_i-x_k+y_i-y_k+2)

其中 k 是我们从前面转移的点的编号。

但是注意一下,我们取最大值时,要取 f(i,j)+m-j,因为也要考虑在后面放 m-j 个点的情况。

时间复杂度 O(n^2m)

代码

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m,ans;
struct node{
	int x,y;
}a[501];
bool cmp(node a,node b)
{
	if(a.x==b.x)return a.y<b.y;
	return a.x<b.x;
}
int f[501][101];
signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i].x>>a[i].y;
	}
	sort(a+1,a+n+1,cmp);
	for(int i=0;i<=m;i++)
		f[1][i]=i+1;
	
	for(int i=2;i<=n;i++)
	{	for(int j=0;j<=m;j++){
			for(int k=1;k<i;k++)
			{
				if(a[k].y>a[i].y)continue;
				if(a[k].x==a[i].x&&a[i].y-a[k].y==1||a[k].y==a[i].y&&a[i].x-a[k].x==1)
					f[i][j]=max(f[i][j],f[k][j]);
				else{
					int temp=a[i].x-a[k].x+a[i].y-a[k].y-1;
					if(temp<=j)
					{
						f[i][j]=max(f[i][j],f[k][j-temp]+temp);
					}
				}
			}
			f[i][j]++;
			ans=max(ans,f[i][j]+m-j);}
	}
	cout<<ans;
	return 0;
}

标签:node,&&,个点,temp,int,long,2022,CSP,点列
From: https://blog.csdn.net/2403_87021226/article/details/143311226

相关文章

  • CSP-S 2024 游记
    Day0回顾了一下各类字符串算法,切了几道ACAM的题。(果然没考)然后就摆了。Day1上午狠狠的摆。下午去考场。考试过程中被小孩哥干扰,左边砸鼠标,右边砸键盘。有点缺德。T1签。记\(cnt_i\)为战力为\(i\)的怪兽的个数,答案即为\(\max(cnt_i)\)。T2转换成每个车能被下......
  • [CSP J/S第一轮知识] 计算机中的进制
    二进制二进制是一种数值表示系统,使用两个数码0和1表示数,现代的二进制记数系统是由戈特弗里德·莱布尼茨于167916791679年设计的。在计算机科学中,二进制是基本的数......
  • [NISACTF 2022]babyserialize
    1.题目2.exp两种第一种:<?phpheader("Content-Type:text/html;charset=utf-8");classNISA{public$fun;public$txw4ever='SYSTEM("tac/f*");';}classTianXiWei{public$ext;publi......
  • CSP-S 2024 游记:祸兮,福之所倚;福兮,祸之所伏。
    前情提要:不会写游记,只是想写神秘的摘要。本来不想写游记的。因为一些神秘原因来写一写。day-1哎哎,怎么\(29\)号了啊,尝试进行一下回忆。记忆非常模糊啊,只不过记得昨天晚上打了CF,但是已经进行了早起,这是为什么呢?CF打的很唐,没打完D因为忘记带充电线导致电脑关机了,不过赛后......
  • CSPPPPP
    (?表示存疑,单独一个括号表示谔谔剩余3日感觉受周期影响有点大,所以直接当CSP不存在,把CSP当模拟赛打就可以打好(?不过nfls考前放三个大DS是什么意思啊,写完前两个就3h了,不过排名还不错(?下午把后两个改了,T3感觉找下规律列个GF就做完了,有时间的话肯定能切(?然后T4是巨型......
  • 【杂谈】whk 选手的 CSP-S 2024 游记
    每年前总会想一些有关早年OI的经历。从去年全机房搞颓(除了Million小朋友)被冰霜秒全场的经历,到更早一点还是普及组选手考前在背背包板子的事情,这才意识到,原来已经过去这么久了啊。即使每年考前的经历或许已然模糊,但打摆玩Minecraft的经历还依旧历历在目。于是,在大概率是我OI......
  • P11234 [CSP-S 2024] 擂台游戏
    看看了看今年的csps,前三题一眼就秒了,这最后一题想了挺久,还写了快两个小时,要是在正式赛场上估计是要暴毙了,不过好在我已经退役了,希望参赛的选手能有好的发挥题目大意太长了,不写了题解考虑每次加入一个人,然后分析变化的答案经过一些分析,可以发现一些性质1.对于完全没有确定能......
  • CSP-J 2024-T1扑克牌
    方法一:使用二维字符数组存储,利用字符串函数比较去重#include<bits/stdc++.h>usingnamespacestd;intn;chara[62][3];//注意此处第二维数组需要开3否则会出现未知错误intcnt;//用于统计去重后的个数intmain(){ //cout<<strcmp("dd","dd")<<""<<strcmp("......
  • CSP2024游记
    CSP2024游记J组T1,T2,T3一个小时做完,T4两个半小时不会做。S组T1最开始以为是一个线段树,写完了才发现一个循环搞定,浪费一个小时。T2发现算出超速区间后就变成了一个每个区间选一个点的贪心,一个小时做完。T4看了发现不能做,开始做T3。T3先是想了一个非常接近正解的错解,本来改......
  • HNU-操作系统实验lab6-2022级
    实验目的任务调度是操作系统的核心功能之一。UniProton实现的是一个单进程支持多线程的操作系统。在UniProton中,一个任务表示一个线程。UniProton中的任务为抢占式调度机制,而非时间片轮转调度方式。高优先级的任务可打断低优先级任务,低优先级任务必须在高优先级任务挂起或......