hdu 1025:Constructing Roads In JGShining's Kingdom(DP + 二分优化)
Constructing Roads In JGShining's Kingdom
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 13646 Accepted Submission(s): 3879
Half of these cities are rich in resource (we call them rich cities) while the others are short of resource (we call them poor cities). Each poor city is short of exactly one kind of resource and also each rich city is rich in exactly one kind of resource. You may assume no two poor cities are short of one same kind of resource and no two rich cities are rich in one same kind of resource.
With the development of industry, poor cities wanna import resource from rich ones. The roads existed are so small that they're unable to ensure the heavy trucks, so new roads should be built. The poor cities strongly BS each other, so are the rich ones. Poor cities don't wanna build a road with other poor ones, and rich ones also can't abide sharing an end of road with other rich ones. Because of economic benefit, any rich city will be willing to export resource to any poor one.
Rich citis marked from 1 to n are located in Line I and poor ones marked from 1 to n are located in Line II.
The location of Rich City 1 is on the left of all other cities, Rich City 2 is on the left of all other cities excluding Rich City 1, Rich City 3 is on the right of Rich City 1 and Rich City 2 but on the left of all other cities ... And so as the poor ones.
But as you know, two crossed roads may cause a lot of traffic accident so JGShining has established a law to forbid constructing crossed roads.
For example, the roads in Figure I are forbidden.

In order to build as many roads as possible, the young and handsome king of the kingdom - JGShining needs your help, please help him. ^_^
You should tell JGShining what's the maximal number of road(s) can be built.
1 2
2 1
3
1 2
2 3
3 1
My king, at most 1 road can be built.
Case 2:
My king, at most 2 roads can be built.
Huge input, scanf is recommended.
链接:LIS 算法解析
for i=1 to total-1
for j=i+1 to total
if a[i]<a[j] then
if dp[i]+1 > dp[j]
dp[j] = dp[i]+1;
链接:Dynamic Programming之Longest Increasing Subsequence (LIS)问题
2) dp[i]=max{dp[j]}+1;(1<=j<i且a[j]<a[i])
for i=2 to total
int m=0;
for j=1 to i-1
if dp[j] > m && a[j] < a[i] then
m=dp[j];
dp[i]=m+1;
#include <iostream>
#include <stdio.h>
using namespace std;
int a[];
int q[];
int BinSearch(int max,int min,int des) //二分查找第一个比des大的数,并返回坐标
{
int l = min,r = max;
int mid,t;
while(l<=r){
mid = (l+r)/;
if(des<=q[mid]){
t=mid;
r=mid-;
}
else{
l=mid+;
}
}
return t;
}
int main()
{
int n,num=;
while(cin>>n){
for(int i=;i<=n;i++){
int t,r;
scanf("%d%d",&t,&r);
a[t]=r;
}
q[] = ;
int f = ;
for(int i=;i<=n;i++){
if(a[i]>a[i-]){
q[f++]=a[i];
}
else{
int t = BinSearch(f-,,a[i]);
q[t] = a[i]; }
/*
for(int j=1;j<f;j++)
cout<<q[j]<<' ';
cout<<endl;
*/
}
cout<<"Case "<<num++<<':'<<endl;
if(f-==)
cout<<"My king, at most "<<f-<<" road can be built."<<endl;
else
cout<<"My king, at most "<<f-<<" roads can be built."<<endl;
cout<<endl;
}
return ;
}
#include <iostream>
#include <stdio.h>
using namespace std;
int a[];
int q[];
int BinSearch(int n) //二分查找
{
int len = ;
q[] = a[];
for(int i=;i<=n;i++){
int l=,r=len;
while(l<=r){
int mid = (l+r)/;
if(a[i]<=q[mid])
r=mid-;
else
l=mid+;
}
q[l] = a[i];
if(l>len)
len=l;
}
return len;
}
int main()
{
int n,num=;
while(cin>>n){
for(int i=;i<=n;i++){
int t,r;
scanf("%d%d",&t,&r);
a[t]=r;
} int len = BinSearch(n); cout<<"Case "<<num++<<':'<<endl;
if(len==)
cout<<"My king, at most "<<len<<" road can be built."<<endl;
else
cout<<"My king, at most "<<len<<" roads can be built."<<endl;
cout<<endl;
}
return ;
}
Freecode : www.cnblogs.com/yym2013
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 1025 Constructing Roads In JGShining's Kingdom(二维LIS)
Constructing Roads In JGShining's Kingdom Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65 ...
- [ACM] hdu 1025 Constructing Roads In JGShining's Kingdom (最长递增子序列,lower_bound使用)
Constructing Roads In JGShining's Kingdom Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65 ...
- HDU 1025 Constructing Roads In JGShining's Kingdom[动态规划/nlogn求最长非递减子序列]
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+二分)
点我看题目 题意 :两条平行线上分别有两种城市的生存,一条线上是贫穷城市,他们每一座城市都刚好只缺乏一种物资,而另一条线上是富有城市,他们每一座城市刚好只富有一种物资,所以要从富有城市出口到贫穷城市, ...
- hdu 1025 Constructing Roads In JGShining’s Kingdom 【dp+二分法】
主题链接:pid=1025">http://acm.acmcoder.com/showproblem.php?pid=1025 题意:本求最长公共子序列.但数据太多. 转化为求最长不下 ...
- HDU 1025 Constructing Roads In JGShining's Kingdom(求最长上升子序列nlogn算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1025 解题报告:先把输入按照r从小到大的顺序排个序,然后就转化成了求p的最长上升子序列问题了,当然按p ...
- hdu 1025 Constructing Roads In JGShining's Kingdom
本题明白题意以后,就可以看出是让求最长上升子序列,但是不知道最长上升子序列的算法,用了很多YY的方法去做,最后还是超时, 因为普通算法时间复杂度为O(n*2),去搜了题解,学习了一下,感觉不错,拿出来 ...
- 最长上升子序列 HDU 1025 Constructing Roads In JGShining's Kingdom
最长上升子序列o(nlongn)写法 dp[]=a[]; ; ;i<=n;i++){ if(a[i]>dp[len]) dp[++len]=a[i]; ,dp++len,a[i])=a[i ...
随机推荐
- 查看Buffer Pool使用情况--[转]
----源自:微软官方博客论坛 我的SQL Server buffer pool很大,有办法知道是哪些对象吃掉我的buffer Pool内存么?比方说,能否知道是哪个数据库,哪个表,哪个index占用 ...
- 从头认识多线程-1.9 迫使线程停止的方法-return法
这一章节我们来讨论一下还有一种停止线程的方法-return 1.在主线程上面return,是把全部在执行的线程都停掉 package com.ray.deepintothread.ch01.topic ...
- oracle 获取指定日期的第一天和最后一天
oracle 获取指定日期的第一天和最后一天 CreationTime--2018年8月21日17点56分 Author:Marydon 1.查询本月的第一天和最后一天 SELECT TO_CHA ...
- Percona Toolkit工具集介绍
部署mysql工具是一个非常重要的部分,所以工具的可靠性和很好的设计非常重要.percona toolkit是一个有30多个mysql工具的工具箱.兼容mysql,percona server,mar ...
- Windows7下搭建Android开发环境
以后工作中要用到android开发,所以想搭建好开发环境,笔记本装的是win7 准备文件: 1 下载Android SDK http://code.google.com/android/downloa ...
- J2ME项目移植到Android平台六大注意事项
很多J2ME项目如何移植到Android平台呢?Java虽然号称是跨平台应用但是目前的移植问题还是比较严重的,不知道未来Sun推出JavaFx或F3时会出现什么问题,如何从J2ME移植到Android ...
- eclipse 10个常用 快捷键
Eclipse中10个最有用的快捷键组合 一个Eclipse骨灰级开发者总结了他认为最有用但又不太为人所知的快捷键组合.通过这些组合可以更加容易的浏览源代码,使得整体的开发效率和质量得到提升. ...
- 对称加密算法-DES以及DESede算法
一.简述 对称加密算法就是能将数据加解密.加密的时候用密钥对数据进行加密,解密的时候使用同样的密钥对数据进行解密. DES是美国国家标准研究所提出的算法.因为加解密的数据安全性和密钥长度成正比.des ...
- linux中使用lftp上传下载文件
lftp是linux中一款ftp服务器相比windows中的ftp显得要复杂不少了,下面我来总结一下lftp文件上传,文件下载,及文件查找等等相关命令吧. lftp连接的几种方法,最常用的是lftp ...
- 每日英语:Now on Taobao: Outsourced Care for Grandma
China's newly revised elder-care law has come as good news for a handful of entrepreneurs who specia ...