CF 4 D. Mysterious Present

2023-12-07 05:32
文章标签 cf present mysterious

本文主要是介绍CF 4 D. Mysterious Present,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目:Mysterious Present

思路:类似于最长上升子序列,开始的时候自作聪明,以为是长和宽可以旋转的,= = 


#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <queue>
using namespace std;
#define maxn 5010
#define inf 0xfffffff
struct node
{int x,y;int no;
}p[maxn];
bool cmp(node a,node b)
{if(a.x==b.x)return a.x<b.x;return a.x<b.x;
}
int dp[maxn];
int main()
{int sx,sy;int n;scanf("%d",&n);scanf("%d%d",&sx,&sy);//if(sx>sy)//swap(sx,sy);for(int i=1;i<=n;i++){scanf("%d%d",&p[i].x,&p[i].y);p[i].no=i;//if(p[i].x>p[i].y)//swap(p[i].x,p[i].y);}sort(p+1,p+n+1,cmp);int ctag=n+1;for(int i=0;i<=n;i++)if(p[i].x>sx&&p[i].y>sy){ctag=i;break;}for(int i=ctag;i<=n;i++)if(p[i].x>sx&&p[i].y>sy)dp[i]=1;elsedp[i]=-inf;for(int i=ctag;i<=n;i++)for(int j=i+1;j<=n;j++)if(p[j].x>p[i].x&&p[j].y>p[i].y&&p[j].x>sx&&p[j].y>sy)dp[j]=max(dp[j],dp[i]+1);int ans=0;for(int i=1;i<=n;i++){//cout<<dp[i]<<endl;ans=max(ans,dp[i]);}deque<int>q;while(!q.empty())q.pop_front();int index=1;for(int i=1;i<=n;i++)if(dp[i]>dp[index]&&p[i].x>sx&&p[i].y>sy)index=i;//cout<<index<<endl;q.push_front(p[index].no);for(int i=index-1;i>=1;i--){if(q.size()==ans)break;if(p[index].x>p[i].x&&p[index].y>p[i].y&&dp[index]==dp[i]+1){index=i;q.push_front(p[i].no);if(q.size()==ans)break;}}cout<<ans<<endl;if(ans){while(q.size()>1)cout<<q.front()<<" ",q.pop_front();cout<<q.front()<<endl;}return 0;
}


这篇关于CF 4 D. Mysterious Present的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/464658

相关文章

cf 164 C 费用流

给你n个任务,k个机器,n个任务的起始时间,持续时间,完成任务的获利 每个机器可以完成任何一项任务,但是同一时刻只能完成一项任务,一旦某台机器在完成某项任务时,直到任务结束,这台机器都不能去做其他任务 最后问你当获利最大时,应该安排那些机器工作,即输出方案 具体建图方法: 新建源汇S T‘ 对任务按照起始时间s按升序排序 拆点: u 向 u'连一条边 容量为 1 费用为 -c,

CF 508C

点击打开链接 import java.util.Arrays;import java.util.Scanner;public class Main {public static void main(String [] args){new Solve().run() ;} }class Solve{int bit[] = new int[608] ;int l

Vue3图片上传报错:Required part ‘file‘ is not present.

错误 "Required part 'file' is not present" 通常表明服务器期望在接收到的 multipart/form-data 请求中找到一个名为 file 的部分(即文件字段),但实际上没有找到。这可能是因为以下几个原因: 请求体构建不正确:在发送请求时,可能没有正确地将文件添加到 FormData 对象中,或者使用了错误的字段名。 前端代码错误:在前端代码中,可能

【CF】C. Glass Carving(二分 + 树状数组 + 优先队列 + 数组计数)

这题简直蛋疼死。。。。。 A了一下午 #include<cstdio>#include<queue>#include<cstring>#include<algorithm>using namespace std;typedef long long LL;const int maxn = 200005;int h,w,n;int C1[maxn],C2[maxn];int

【CF】E. Anya and Cubes(双向DFS)

根据题意的话每次递归分3种情况 一共最多25个数,时间复杂度为3^25,太大了 我们可以分2次求解第一次求一半的结果,也就是25/2 = 12,记录结果 之后利用剩余的一半求结果 s-结果 = 之前记录过的结果 就可以 时间复杂度降低为 3 ^ (n/2+1) 题目链接:http://codeforces.com/contest/525/problem/E #include<set

【CF】D. Arthur and Walls(BFS + 贪心)

D题 解题思路就是每次检查2X2的方格里是否只有一个‘*’,如果有的话这个*就需要变成‘.’,利用BFS进行遍历,入队的要求是这个点为. 一开始将所有的'.'全部加入队列,如果碰到一个'*'变成'.'就入队,判断的时候从4个方向就行判断 题目链接:http://codeforces.com/contest/525/problem/D #include<cstdio>#include<

CF#271 (Div. 2) D.(dp)

D. Flowers time limit per test 1.5 seconds memory limit per test 256 megabytes input standard input output standard output 题目链接: http://codeforces.com/contest/474/problem/D We s

CF Bayan 2015 Contest Warm Up B.(dfs+暴力)

B. Strongly Connected City time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output 题目链接: http://codeforces.com/contest/475/probl

CF Bayan 2015 Contest Warm Up A.(模拟+预处理)

A. Bayan Bus time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output 题目链接: http://codeforces.com/contest/475/problem/A The fi

CF #278 (Div. 2) B.(暴力枚举+推导公式+数学构造)

B. Candy Boxes time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output 题目链接: http://codeforces.com/contest/488/problem/B There