点击打开题目链接

本题目是考察  最长递增子序列的  有n^2     n(logn)  n^2  会超时的

下面两个方法的代码  思路  可以百度LIS  LCS

dp里面存子序列

n(logn)   代码

<span style="font-size:18px;">#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<stdlib.h>
#define N 500000
using namespace std; int road[N],dp[N],n,len; int two_part(int *a,int L,int R, int aim) //二分法找更新的位置
{
int zz;
if(len==1&&dp[1]==0) return 1;
while(L<=R)
{
int mid=(L+R)/2;
if(aim>a[mid]&&aim<a[mid+1]) return mid+1;
else if(aim>a[mid]) L=mid+1;
else if(aim<a[mid]) R=mid-1;
}
if(aim<=dp[1]) return 1; //目标数字比第一个数小则更新dp[1]
return ++len; //找不到则在末尾更新
}
int ans()
{
int i;
for(i=1; i<=n; i++) //把每个数字在dp数组中更新
{
int wz=two_part(dp,1,len,road[i]);
dp[wz]=road[i];
// print();
}
return len;
} int main()
{
int t=1;
while(scanf("%d",&n)!=EOF)
{
int i;
len=1;
memset(road,0,sizeof(road));
memset(dp,0,sizeof(dp));
for(i=1; i<=n; i++)
{
int ra,rb;
scanf("%d%d",&ra,&rb);
road[ra]=rb;
}
int answer=ans();
// printf("%d\n",ans());
printf("Case %d:\n",t++);
if(answer==1) printf("My king, at most %d road can be built.\n\n",answer);
else printf("My king, at most %d roads can be built.\n\n",answer);
}
return 0;
}</span>
<span style="font-size:18px;">
</span>

n^2代码

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<stdlib.h>
#define N 500000
using namespace std; int road[N],dp[N],n; //int two_part(int *a,int L,int R, int aim)
//{
// while(L<=R)
// {
// int mid=(L+R)/2;
// if(aim==a[mid]) return mid;
// else if(aim>mid)
// {
// L=mid+1;
// }
// else
// {
// R=mid-1;
// }
// }
// return -1;
//} int ans()
{
int sum=0;
int i,j;
for(i=0;i<n;i++)
{
j=0;
while(1)
{
if(road[i]<dp[j]||!dp[j])
{
dp[j]=road[i];
break;
}
j++;
}
}
for(i=0;i<n;i++)
if(dp[i]) sum++;
return sum;
} int main()
{
while(scanf("%d",&n)!=EOF)
{
int i;
memset(road,0,sizeof(road));
memset(dp,0,sizeof(dp));
for(i=0;i<n;i++)
{
int ra,rb;
scanf("%d%d",&ra,&rb);
road[ra]=rb;
}
int answer=ans();
// printf("%d\n",ans());
if(answer==1) printf("My king, at most %d road can be built.\n\n",answer);
else printf("My king, at most %d roads can be built.\n\n",answer);
}
return 0;
}

Constructing Roads In JGShining's Kingdom的更多相关文章

  1. Constructing Roads In JGShining's Kingdom(HDU1025)(LCS序列的变行)

    Constructing Roads In JGShining's Kingdom  HDU1025 题目主要理解要用LCS进行求解! 并且一般的求法会超时!!要用二分!!! 最后蛋疼的是输出格式的注 ...

  2. [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 ...

  3. 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 ...

  4. hdu--(1025)Constructing Roads In JGShining's Kingdom(dp/LIS+二分)

    Constructing Roads In JGShining's Kingdom Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65 ...

  5. Constructing Roads In JGShining's Kingdom(HDU 1025 LIS nlogn方法)

    Constructing Roads In JGShining's Kingdom Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65 ...

  6. hdu 1025:Constructing Roads In JGShining's Kingdom(DP + 二分优化)

    Constructing Roads In JGShining's Kingdom Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65 ...

  7. HDOJ(HDU).1025 Constructing Roads In JGShining's Kingdom (DP)

    HDOJ(HDU).1025 Constructing Roads In JGShining's Kingdom (DP) 点我挑战题目 题目分析 题目大意就是给出两两配对的poor city和ric ...

  8. hdu-1025 Constructing Roads In JGShining's Kingdom(二分查找)

    题目链接: Constructing Roads In JGShining's Kingdom Time Limit: 2000/1000 MS (Java/Others)     Memory Li ...

  9. 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 ...

  10. 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 ...

随机推荐

  1. 手动安装windows的磁盘清理工具

    All you really need to do is copy some files that are already located on your server into specific s ...

  2. 26个高效工作的小技巧 z

    1.时间常有,时间优先. 2.时间总会有的:每天只计划4-5 小时真正的工作. 3.当你在状态时,就多干点:不然就好好休息:有时候会连着几天不是工作状态,有时在工作状态时却又能天天忙活 12 小时,这 ...

  3. Android View 测量流程(Measure)完全解析

    前言 上一篇文章,笔者主要讲述了DecorView以及ViewRootImpl相关的作用,这里回顾一下上一章所说的内容:DecorView是视图的顶级View,我们添加的布局文件是它的一个子布局,而V ...

  4. 近期微信上非常火的小游戏【壹秒】android版——开发分享

    近期在朋友圈,朋友转了一个html小游戏[壹秒],游戏的规则是:用户按住button然后释放,看谁能精准地保持一秒的时间.^_^刚好刚才在linuxserver上调试程序的时候server挂了,腾出点 ...

  5. 判断用户Input输入的事件来进行登陆

    我们是通过键盘按的object.keyCode获取的 Html <input onkeydown="keydownMsg(event)" type="text&qu ...

  6. Android摄像头採集的视频数据流怎样通过Socket实时发送到目标服务端

    分两块: 1.取得摄像头採集的视频流 2.发送到server端 protected MediaRecorder mMediaRecorder; private LocalServerSocket mL ...

  7. hdu5318 The Goddess Of The Moon (矩阵高速幂优化dp)

    题目:pid=5318">http://acm.hdu.edu.cn/showproblem.php?pid=5318 题意:给定n个数字串和整数m,规定若数字串s1的后缀和数字串s2 ...

  8. java 回文字符串

    package string.string1_5; public class Palindrome { /** * 从两头向中间移动 * @param str * @return */ public ...

  9. MySQL 导入导出命令(转载)

    导出数据: mysqldump --databases -u root -p密码 数据库名> /root/guogl/XXX.sql 从sql文件导入数据: mysql -u root -p密码 ...

  10. 获取iOS系统版本号,慎重使用[[[UIDevice currentDevice] systemVersion] floatValue]——【sdk缺陷】

    iOS 最常见的获取系统版本的方法是: [[[UIDevice currentDevice] systemVersion] floatValue] 可是.这个floatValue是不靠谱的,这也算是i ...