首页 > 其他分享 >上升点列

上升点列

时间:2022-11-30 18:35:04浏览次数:57  
标签:node 10 int bool ans 510 上升 点列

题目来源

CSP2022-J-T4

题解1,预计得分10分

数据分析,测试点1-2的n≤10,k=0。可采用傻傻的暴力得分
先取点后排序再判断是否符合题意
取点方法有两种:dfs和二进制,见链接
时间复杂度为指数级

#include<bits/stdc++.h>
using namespace std;
int n, k, ans=1;
struct node{
	int x, y;
}; 
node p[510], t[510];//p用于输入,t用于存放取出的点 
bool cmp(node a, node b){
	return a.x+a.y < b.x+b.y;
}
bool pd(int len){
	bool f=true;
	for(int i=1; i<len; i++)
		if(t[i].x+t[i].y-t[i-1].x-t[i-1].y != 1){
			f=false;break;
		}
	return f;
}
bool cni(int x, int y){//x个数取y个数,此处也可用dfs暴力选取
	bool f=false;
	for(int i=(1<<y)-1; i<(1<<x); i++){
		int num=0; int k=i;//num用于计数k的二进制位1的个数
		while(k){
			k=k&(k-1);
			num++;
		} 
		if(num==y){
			int cnt=0;
			memset(t, 0, sizeof(t));
			for(int j=0; j<x; j++)
				if(i&(1<<j))
					t[cnt++]=p[j];
			sort(t, t+cnt, cmp);
//			for(int w=0; w<cnt; w++)
//				cout<<t[w].x<<","<<t[w].y<<" ";
//			cout<<endl;
			if(pd(cnt))
				return true;
		} 
	}
	return f;
}
int main()
{
	cin>>n>>k;
	for(int i=0; i<n; i++)cin>>p[i].x>>p[i].y;
	for(int i=n; i>1; i--)
		if(cni(n, i))//从n个数中取出i个点 
		{
			ans=i;
			break;
		}
	cout<<ans;
	return 0;
}
/*
5 4
5 4
1 2
3 3
1 3
2 3
*/

标签:node,10,int,bool,ans,510,上升,点列
From: https://www.cnblogs.com/tflsnoi/p/16939347.html

相关文章

  • C++专题:最长上升子序列 (LIS)
    1.LIS的定义:最长上升子序列(Longest IncreasingSubsequence),简称LIS,也有些情况求的是最长非降序子序列,二者区别就是序列中是否可以有相等的数。假设我们有一个序列bi,当b......
  • 分享Discuz! X2插件嵌入点列表(包含门户、社区、群组等)
    标红的为雨哲嵌入点20110514已加入调用的。1全局(common/)extcredits.htmstringspacecp_credit_extrafaq.htmstringfaq_extrafooter.htmstringglob......
  • 最长上升词组
     最长上升词组时间限制: 1Sec  内存限制: 128MB题目描述有一系列按字典序排列的单词。现在定义如果一个单词,通过添加,删除或者改变一个字符,和另一个单词相同,则认为两......
  • P8816 [CSP-J 2022] 上升点列 题解
    题目传送门:luoguP8816[CSP-J2022]上升点列这是一道简单的dp题。定义到达指两点的曼哈顿距离是\(1\)。我们考虑设状态\(f(i,j)\)表示考虑结尾是第\(i\)个点,增......
  • CSU 1807 最长上升子序列~
    [​​Submit​​​][​​​Status​​​][​​​WebBoard​​]Description1,p2,…,pn.1,p2,…,pn 互不相同(即p1,p2,…,pn......
  • AcWing 896.最长上升子序列Ⅱ
    题目链接:http://www.acwing.com/problem/content/898/不像是dp,更像是贪心相对于数据小的上升子序列问题,此题用过的二分后的时间复杂度为nlogn。在本题中首先需要明白:......
  • 最长上升子序列
    题目:题解:#include<bits/stdc++.h>usingnamespacestd;longlonga[1005];longlongf[1005];intmain(){intn;cin>>n;for(inti=1;i<=n;i++){......
  • 最长上升子序列 II
    题目:题解:使用二分#include<bits/stdc++.h>usingnamespacestd;constintN=5e5+10;longlonga[N],f[N];intcon;intfind(intx){intl=1,r=con;while(l<r){......
  • P8816 [CSP-J 2022] 上升点列(民间数据)
    #include<bits/stdc++.h>usingnamespacestd;intn,m,dp[505][205],ans,c[505][505],rk,ri,rlt;structNode{ intx,y;}a[505];boolcmp(Nodep,Nodeq){ if(p.x......
  • 最长公共上升子序列
      n^3#include<iostream>#include<algorithm>#include<cstring>#include<vector>usingnamespacestd;constintN=600;intn,m,a[N],b[N],f[N][N];i......