3359: [Usaco2004 Jan]矩形
时间:2022-05-08
本文章向大家介绍3359: [Usaco2004 Jan]矩形,主要内容包括3359: [Usaco2004 Jan]矩形、Description、Input、Output、Sample Input、Sample Output、HINT、Source、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
3359: [Usaco2004 Jan]矩形
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 8 Solved: 5
Description
给出N个矩形(1≤N≤100)和它的长和宽(不超过1000),写一个程序找出最大的K,使得
有K个矩形满足层层包含的关系,即里层的矩形被所有外层的矩形包含.一个矩形P1包含另一个
矩形P2,则P2的一边小于P1的一边,并且P9的另一边不超过P1的另一边.如果两个矩形相同,视为不包含.如2 x 1的矩形被2x2的矩形包含,不被1 x 2的矩形包含.
注意:矩形的顺序可以是任意的,且矩形可以旋转.
Input
第1行:整数N.
第2到N+1行:矩形的长和宽,均为整数.
Output
一行,输出最大的包含数K.
Sample Input
4 8 14 16 28 29 12 14 8
Sample Output
2
HINT
Source
题解:其实很明显有更好的办法的,但是我还是逗比的建立了一个拓扑图(A-->B表示A举行包含在B里面,为了方便,我还弄了个 ( -1 * -1 ) 的矩形作为源点),然后去用spfa求出从源点出发各个点的最长路径,然后求出最大值即可
1 type
2 point=^node;
3 node=record
4 g,w:longint;
5 next:point;
6 end;
7 var
8 i,j,k,l,m,n,f,r:longint;
9 p:point;
10 a:array[0..10000,1..2] of longint;
11 b:array[0..10000] of point;
12 c,g:array[0..10000] of longint;
13 d:array[0..100000] of longint;
14 procedure add(x,y,z:longint);inline;
15 var p:point;
16 begin
17 new(p);p^.g:=y;p^.w:=z;
18 p^.next:=b[x];b[x]:=p;
19 end;
20 procedure swap(var x,y:longint);inline;
21 var z:longint;
22 begin
23 z:=x;x:=y;y:=z;
24 end;
25 procedure sort(l,r:longint);inline;
26 var i,j,x,y:longint;
27 begin
28 i:=l;j:=r;x:=a[(l+r) div 2,1];y:=a[(l+r) div 2,2];
29 repeat
30 while (a[i,1]<x) or ((a[i,1]=x) and (a[i,2]<y)) do inc(i);
31 while (a[j,1]>x) or ((a[j,1]=x) and (a[j,2]>y)) do dec(j);
32 if i<=j then
33 begin
34 swap(a[i,1],a[j,1]);
35 swap(a[i,2],a[j,2]);
36 inc(i);dec(j);
37 end;
38 until i>j;
39 if i<r then sort(i,r);
40 if l<j then sort(l,j);
41 end;
42 begin
43 readln(n);
44 for i:=1 to n do
45 begin
46 readln(a[i,1],a[i,2]);
47 if a[i,1]>a[i,2] then swap(a[i,1],a[i,2]);
48 end;
49 a[n+1,1]:=-1;a[n+1,2]:=-1;n:=n+1;
50 sort(1,n);
51 for i:=1 to n do b[i]:=nil;
52 for i:=1 to n-1 do
53 for j:=i+1 to n do
54 if (a[j,2]>a[i,2]) or ((a[j,2]>=a[i,2]) and (a[j,1]>a[i,1])) then
55 begin
56 add(i,j,1);
57 end;
58 f:=1;r:=2;d[1]:=1;g[1]:=1;
59 fillchar(c,sizeof(c),0);
60 while f<r do
61 begin
62 p:=b[d[f]];
63 while p<>nil do
64 begin
65 if (c[d[f]]+p^.w)>c[p^.g] then
66 begin
67 c[p^.g]:=p^.w+c[d[f]];
68 if g[p^.g]=0 then
69 begin
70 g[p^.g]:=1;
71 d[r]:=p^.g;
72 inc(r);
73 end;
74 end;
75 p:=p^.next;
76 end;
77 g[d[f]]:=0;
78 inc(f);
79 end;
80 l:=0;
81 for i:=1 to n do if c[i]>l then l:=c[i];
82 writeln(l);
83 end.
- TensorFlow | 自己动手写深度学习模型之全连接神经网络
- 多线程编程学习二(对象及变量的并发访问).
- ASM基本配置问题(r5笔记第89天)
- 如何上手使用 Facebook 的开源平台 Detectron?
- 多线程编程学习三(线程间通信).
- 关于create database语句在10g,11g中的不同(r5笔记第88天)
- Web开发模式【Mode I 和Mode II的介绍、应用案例】
- 多线程编程学习四(Lock 的使用)
- Android编程规范
- 干货 | 深入分析Object.wait/notify实现机制
- 关于ORA-01555的问题分析(r5笔记第87天)
- 项目工具类
- AJAX常见面试题
- 干货 | Tomcat类加载机制触发的Too many open files问题分析
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- python 用opencv接口把视频逐帧转化为图片
- Element el-tree树形控件的数据处理方法
- 基于docker快速搭建hive环境
- flag区分大小写的sql盲注
- Spring中的Spring JSR-250 注释
- WebRTC 入门指南
- 【DB笔试面试844】在Oracle中,tnsnames.ora文件的作用是什么?
- Spring 基于注解(annotation)的配置之@Qualifier注解
- Spring 基于设值函数的依赖注入
- Spring 基于构造函数的依赖注入
- 绕过卡巴进程保护的一些总结
- Loki | 数据过期自动删除策略设计
- 【短道速滑二】古老的基于亮度平均值的自动Gamma校正算法。
- Docker-Compose基础与实战,看这一篇就够了
- 干货-python与安全(一)入门简介