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

相关文章

uva 11178 计算集合模板题

题意: 求三角形行三个角三等分点射线交出的内三角形坐标。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <

Java基础回顾系列-第六天-Java集合

Java基础回顾系列-第六天-Java集合 集合概述数组的弊端集合框架的优点Java集合关系图集合框架体系图java.util.Collection接口 List集合java.util.List接口java.util.ArrayListjava.util.LinkedListjava.util.Vector Set集合java.util.Set接口java.util.HashSetjava

【408数据结构】散列 (哈希)知识点集合复习考点题目

苏泽  “弃工从研”的路上很孤独,于是我记下了些许笔记相伴,希望能够帮助到大家    知识点 1. 散列查找 散列查找是一种高效的查找方法,它通过散列函数将关键字映射到数组的一个位置,从而实现快速查找。这种方法的时间复杂度平均为(

java集合的概述

集合就是一个容器,我们可以把多个对象放入的容器中。就像水杯(假设容量可以不断扩大)一样,你可以往水杯中不断地添加水,既然是水杯,你就不能往里添加沙子,也就是说集合中添加的对象必须是同一个类型的(引用类型,而不能是基本类型)。 看到集合的介绍会让我们的想起数组,那么集合和数组有什么区别呢? 首先,数组的大小是固定的,而集合理论上大小是不限的。 其次,数组既可以存储基本数据类型的数据,也可以存储

hutool 集合相关交集、差集

开发过程中会遇到集合之间的对比之类的需求,之前经常会自己写个工具类来实现,目前hutool可以帮助我们解决很多问题,接下来我们就来实践下。 相关jar包 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>RELEASE</version><scope>compile</sco

Java8中的Stream,让集合操作酸爽起来

简介 java8也出来好久了,接口默认方法,lambda表达式,函数式接口,Date API等特性还是有必要去了解一下。比如在项目中经常用到集合,遍历集合可以试下lambda表达式,经常还要对集合进行过滤和排序,Stream就派上用场了。用习惯了,不得不说真的很好用。 Stream作为java8的新特性,基于lambda表达式,是对集合对象功能的增强,它专注于对集合对象进行各种高效、便利的聚合

算法练习小技巧之有序集合--套路详细解析带例题(leetcode)

前言:         本文详细讲解Python中的有序集合SortedList和C++中的有序集合multiset的用法,配合leetcode的例题来展示实际的用处。(本人水平不够,还无法讲解有序集合的实现方法,只会用)         觉得有帮助或者写的不错可以点个赞,后面也有几道我找出来的题目可以用这个方法快速解决的         (感觉有点水) 目录 有序集合用法讲解:

Java中集合类Set、List和Map的区别

Java中的集合包括三大类,它们是Set、List和Map,它们都处于java.util包中,Set、List和Map都是接口,它们有各自的实现类。Set的实现类主要有HashSet和TreeSet,List的实现类主要有ArrayList,Map的实现类主要有HashMap和TreeMap。那么它们有什么区别呢? Set中的对象不按特定方式排序,并且没有重复对象。但它的有些实现类能对集合中的对

复杂SQL集合(不断收集中)

1.一道SQL语句面试题,关于group by 表内容: 2005-05-09 胜 2005-05-09 胜 2005-05-09 负 2005-05-09 负 2005-05-10 胜 2005-05-10 负 2005-05-10 负 如果要生成下列结果, 该如何写sql语句?             胜 负 2005-05-09 2 2 2005-05-10 1 2 --------

EL表达式获取List集合长度

有一次在jsp页面我要获取后台的一个list集合的长度,当然你可以在后台保存长度然后在页面获取,这是一种方法,现在我介绍另一种方法: 首先:我们在jsp页面导入jstl标签库<%@ taglib prefix="fn" uri="http://java.sun.com/jsp.jstl/functions"%> 然后在你要获取的地方写上:${fn:length(qunarRemarkList)