astar 集合的交与并

2024-02-08 01:48
文章标签 集合 astar 交与

本文主要是介绍astar 集合的交与并,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

C:集合的交与并

时间限制:
1000ms
内存限制:
65536kB
描述

对于一个闭区间集合{A1,A2……AK}(K>1,Ai<>Aj{i<>j}),我们定义其权值

          W=|A1∪A2∪……∪AK|*|A1∩A2∩……AK|

其中|X|表示X区间的长度;如果X为空集|X|=0。

当然,如果这些闭区间没有交集则权值为0。

给定N个各不相同的闭区间,请你从中找出若干个(至少2个)区间使其权值最大。


输入
第一行一个整数N (2 <= N <= 10^5)
接下来N行每行两个整数 l r(1 <= l <= r <= 10^6),表示闭区间的两个端点。
输出
最大权值
样例输入
4
1 6
4 8
2 7
3 5
样例输出
24

 这题是astar的题,表示不知道怎么搞,时间复查度是n =10^5 ,必须要至少 O(n*log n)的时间复查度 ,我的的思路是先把每段区间按左端点 由大到小排序,然后再右断电排,最后像最大字段和那么dp下就可以了…纯属于个人yy的,也不知道对不对,更不会证明……

很戳的代码:有时间在瞅瞅

#include <cstdlib>
#include <iostream>using namespace std;
struct Node
{int l,r;       
}line[100010];int cmp(Node a,Node b)
{if(a.l!=b.l) return a.l < b.l;return a.r < b.r;    
}
int main(int argc, char *argv[])
{int n,l,r;while(scanf("%d",&n)==1){for(int i=0;i<n;i++)                     scanf("%d %d",&line[i].l,&line[i].r);sort(line,line+n,cmp);int ans=0,a,b,start;l=line[0].l,r=line[0].r,start=line[0].l;for(int i=1;i<n;i++){a=line[i].l,b=line[i].r;if(a>=r) l=a,r=b,start=a;else{if(b<=r){if(ans<=(r-start)*(b-a)) ans=(r-start)*(b-a),l=a,r=b;else  l=a,r=b,start=a;}else{if(ans<=(b-start)*(r-a)) ans=(b-start)*(r-a),l=a;else  l=a,r=b,start=a;}}}printf("%d\n",ans);}// system("PAUSE");return EXIT_SUCCESS;
}


这篇关于astar 集合的交与并的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

C++中unordered_set哈希集合的实现

《C++中unordered_set哈希集合的实现》std::unordered_set是C++标准库中的无序关联容器,基于哈希表实现,具有元素唯一性和无序性特点,本文就来详细的介绍一下unorder... 目录一、概述二、头文件与命名空间三、常用方法与示例1. 构造与析构2. 迭代器与遍历3. 容量相关4

Redis中的有序集合zset从使用到原理分析

《Redis中的有序集合zset从使用到原理分析》Redis有序集合(zset)是字符串与分值的有序映射,通过跳跃表和哈希表结合实现高效有序性管理,适用于排行榜、延迟队列等场景,其时间复杂度低,内存占... 目录开篇:排行榜背后的秘密一、zset的基本使用1.1 常用命令1.2 Java客户端示例二、zse

Java集合之Iterator迭代器实现代码解析

《Java集合之Iterator迭代器实现代码解析》迭代器Iterator是Java集合框架中的一个核心接口,位于java.util包下,它定义了一种标准的元素访问机制,为各种集合类型提供了一种统一的... 目录一、什么是Iterator二、Iterator的核心方法三、基本使用示例四、Iterator的工

Java JUC并发集合详解之线程安全容器完全攻略

《JavaJUC并发集合详解之线程安全容器完全攻略》Java通过java.util.concurrent(JUC)包提供了一整套线程安全的并发容器,它们不仅是简单的同步包装,更是基于精妙并发算法构建... 目录一、为什么需要JUC并发集合?二、核心并发集合分类与详解三、选型指南:如何选择合适的并发容器?在多

python语言中的常用容器(集合)示例详解

《python语言中的常用容器(集合)示例详解》Python集合是一种无序且不重复的数据容器,它可以存储任意类型的对象,包括数字、字符串、元组等,下面:本文主要介绍python语言中常用容器(集合... 目录1.核心内置容器1. 列表2. 元组3. 集合4. 冻结集合5. 字典2.collections模块

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

Java集合中的链表与结构详解

《Java集合中的链表与结构详解》链表是一种物理存储结构上非连续的存储结构,数据元素的逻辑顺序的通过链表中的引用链接次序实现,文章对比ArrayList与LinkedList的结构差异,详细讲解了链表... 目录一、链表概念与结构二、当向单链表的实现2.1 准备工作2.2 初始化链表2.3 打印数据、链表长

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

C#之List集合去重复对象的实现方法

《C#之List集合去重复对象的实现方法》:本文主要介绍C#之List集合去重复对象的实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C# List集合去重复对象方法1、测试数据2、测试数据3、知识点补充总结C# List集合去重复对象方法1、测试数据