HDU 1025 城市供应 【LIS】
题目链接:https://vjudge.net/contest/228455#problem/A
题目大意:
有2n个城市,其中有n个富有的城市,n个贫穷的城市,其中富有的城市只在一种资源富有,且富有的城市之间富有的资源都不相同,贫穷的城市只有一种资源贫穷,且各不相同,现在给出一部分贫穷城市的需求,每个需求都是一个贫穷的向一个富有的城市要资源,且每个富有的城市都想向贫穷的城市输入自己富有的那部分资源,现在为了运输要建设多条路,但是路与路之间不允许有交叉,求满足贫穷城市的各种要求最多可以建设多少条路。
解题分析:
此题的难点在于很难看出求城市之间连线的最大值实际上就是,将a城市看成数组,每一个a城市对应的b城市看成a数组的对应值,然后就是求出a城市数组的最长上升子序列的长度。因为要使城市之间的连线不交叉的数量最多,很明显就是要求斜向一个同方向的线条(线条方向分为两种,斜向左和斜向右)最多,即求a数组的最长上升子序列。
记住了最长上升子序列如果要求严格上升的话就是lower_bound 可以相等的话就是upper_bound
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int arr[]; int n;
int Lis[];
int cas = ;
void LIS() //求最大递增子序列
{
//int Lis[500010]; //这个这么大的数组不能定义在子函数里,否则会运行不了,无语
int len = ;
memset(Lis, , sizeof(Lis));
for (int i = ; i <= n; i++)
{
if (arr[i] > Lis[len])Lis[++len] = arr[i];
else
{
int j = lower_bound(Lis + , Lis + len + , arr[i]) - Lis;
Lis[j] = arr[i];
}
}
printf("Case %d:\n", ++cas);
if(len==)printf("My king, at most %d road can be built.\n\n",len); //哇,这里好坑啊,原来只有一条路的时候road用单数,多条路用复数
else
printf("My king, at most %d roads can be built.\n\n", len);
} int main()
{
while (~scanf("%d", &n))
{
memset(arr, , sizeof(arr));
int a, b;
for (int i = ; i <= n; i++) {
scanf("%d %d", &a, &b);
arr[a] = b; //将城市之间的连线形象的转变成,将b看成a城市的值,然后就将这道题转变为了简单的LIS
}
LIS();
}
return ;
}
2018-05-17
HDU 1025 城市供应 【LIS】的更多相关文章
- HDU 1025 Constructing Roads In JGShining's Kingdom(二维LIS)
Constructing Roads In JGShining's Kingdom Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65 ...
- HDU 1025 Constructing Roads In JGShining's Kingdom(DP+二分)
点我看题目 题意 :两条平行线上分别有两种城市的生存,一条线上是贫穷城市,他们每一座城市都刚好只缺乏一种物资,而另一条线上是富有城市,他们每一座城市刚好只富有一种物资,所以要从富有城市出口到贫穷城市, ...
- HDOJ(HDU).1025 Constructing Roads In JGShining's Kingdom (DP)
HDOJ(HDU).1025 Constructing Roads In JGShining's Kingdom (DP) 点我挑战题目 题目分析 题目大意就是给出两两配对的poor city和ric ...
- HDU 4352 XHXJ's LIS 数位dp lis
目录 题目链接 题解 代码 题目链接 HDU 4352 XHXJ's LIS 题解 对于lis求的过程 对一个数列,都可以用nlogn的方法来的到它的一个可行lis 对这个logn的方法求解lis时用 ...
- HDU 4352 XHXJ's LIS HDU(数位DP)
HDU 4352 XHXJ's LIS HDU 题目大意 给你L到R区间,和一个数字K,然后让你求L到R区间之内满足最长上升子序列长度为K的数字有多少个 solution 简洁明了的题意总是让人无从下 ...
- HDU 1025 LIS二分优化
题目链接: acm.hdu.edu.cn/showproblem.php?pid=1025 Constructing Roads In JGShining's Kingdom Time Limit: ...
- HDU 1025:Constructing Roads In JGShining's Kingdom(LIS+二分优化)
http://acm.hdu.edu.cn/showproblem.php?pid=1025 Constructing Roads In JGShining's Kingdom Problem Des ...
- hdu 1025 lis 注意细节!!!【dp】
感觉这道题浪费了我半个小时的生命......哇靠!原来输出里面当len=1时是road否则是roads!!! 其实做过hdu 1950就会发现这俩其实一样,就是求最长上升子序列.我用结构体记录要连线的 ...
- hdu 1025 上面n个点与下面n个点对应连线 求最多能连有多少条不相交的线 (LIS)
题目大意有2n个城市,其中有n个富有的城市,n个贫穷的城市,其中富有的城市只在一种资源富有,且富有的城市之间富有的资源都不相同,贫穷的城市只有一种资源贫穷,且各不相同,现在给出一部分贫穷城市的需求,每 ...
随机推荐
- ElasticSearch学习
官方文档 https://www.elastic.co/cn/ http://www.learnes.net/
- 为什么用pycharm在同目录下import,pycharm会报错,但是实际可以运行?
问题已经找到了,pycharm不会将当前文件目录自动加入自己的sourse_path.右键make_directory as-->sources path将当前工作的文件夹加入source_pa ...
- 配置samba文件服务器
1.打开"终端窗口",输入"sudo apt-get update"-->回车-->"输入当前登录用户的管理员密码"--> ...
- 自动化运维之cobbler安装centos7.3
自动化运维之cobbler安装centos7.3 一.cobbler简介和服务 Cobbler是一款自动化操作系统安装的实现,与PXE安装系统的区别就是可以同时部署多个版本的系统,而PXE只能选择一种 ...
- mysql报错问题解决MySQL server PID file could not be found!
MySQL server PID file could not be found! 无法启动mysql服务 # service mysqld start MySQL server PID file c ...
- spring上传文件
在使用spring上传文件的时候,使用的文件接收参数类型为 org.springframework.web.multipart.MultipartFile 如果该参数没有指定@RequestParam ...
- Nodejs 实现ESL内联FreeSWITCH设定说明
一.背景说明: SIP Server IP (Centos):192.168.11.61 ,服务器IP(Windows):192.168.11.19 二.目的: 能够从192.168.11.19上通 ...
- 【Android开发】之Fragment与Acitvity通信
上一篇我们讲到与Fragment有关的常用函数,既然Fragment被称为是“小Activity”,现在我们来讲一下Fragment如何与Acitivity通信.如果上一篇还有不懂得,可以再看一下.传 ...
- Java的初始化执行顺序(父类static变量->子类static变量->父类成员变量->父类构造器->成员变量->构造器->main函数)
1. 引言 了解Java初始化的顺序,有助于理解Java的初始化机制和内存机制. 顺序:父类static变量->子类static变量->父类成员变量->父类构造器->成员变量- ...
- Linux下进程/程序网络带宽占用情况查看工具 -- NetHogs
http://www.vpser.net/manage/nethogs.html 来自. 最后略有修改 之前VPS侦探曾经介绍过流量带宽相关的工具如:iftop.vnstat,这几个都是统计和监 ...