hdu1025(nlon(n)最长上升子序列)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1025
大致思路:设置两个a,b数组,a数组存储数据,b数组存储最长不降序序列。此算法关键在于设计二分查找。
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <queue>
#include <cstdlib>
#include <vector>
#include <set>
#include <map>
#define LL long long
using namespace std;
int dp[],a[];
int solve(int n)
{
int len=,low,high,mid;
dp[]=a[];
for(int i=;i<=n;i++)
{
low=;high=len;
while(low<=high)
{
mid=(low+high)/;
if(a[i]>dp[mid])low=mid+;
else high=mid-;
}
dp[low]=a[i];
if(low>len)len=low;
}
return len;
}
int main()
{
int n,x,y,cas=;
while(scanf("%d",&n)>)
{
for(int i=;i<=n;i++)
{
scanf("%d%d",&x,&y);
a[x]=y;
}
int ans=solve(n);
printf("Case %d:\n",cas++);
if(ans==)
printf("My king, at most 1 road can be built.\n");
else
printf("My king, at most %d roads can be built.\n",ans);
printf("\n");
}
}
hdu1025(nlon(n)最长上升子序列)的更多相关文章
- hdu1025 dp(最长上升子序列LIS)
题意:有一些穷国和一些富国分别排在两条直线上,每个穷国和一个富国之间可以建道路,但是路不能交叉,给出每个穷国和富国的联系,求最多能建多少条路 我一开始在想有点像二分图匹配orz,很快就发现,当我把穷国 ...
- 用python实现最长公共子序列算法(找到所有最长公共子串)
软件安全的一个小实验,正好复习一下LCS的写法. 实现LCS的算法和算法导论上的方式基本一致,都是先建好两个表,一个存储在(i,j)处当前最长公共子序列长度,另一个存储在(i,j)处的回溯方向. 相对 ...
- 动态规划之最长公共子序列(LCS)
转自:http://segmentfault.com/blog/exploring/ LCS 问题描述 定义: 一个数列 S,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则 ...
- [Data Structure] LCSs——最长公共子序列和最长公共子串
1. 什么是 LCSs? 什么是 LCSs? 好多博友看到这几个字母可能比较困惑,因为这是我自己对两个常见问题的统称,它们分别为最长公共子序列问题(Longest-Common-Subsequence ...
- 动态规划求最长公共子序列(Longest Common Subsequence, LCS)
1. 问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogs belong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与 ...
- LintCode 77: 最长公共子序列
public class Solution { /** * @param A, B: Two string. * @return: the length of the longest common s ...
- 最长下降子序列O(n^2)及O(n*log(n))解法
求最长下降子序列和LIS基本思路是完全一样的,都是很经典的DP题目. 问题大都类似于 有一个序列 a1,a2,a3...ak..an,求其最长下降子序列(或者求其最长不下降子序列)的长度. 以最长下降 ...
- 删除部分字符使其变成回文串问题——最长公共子序列(LCS)问题
先要搞明白:最长公共子串和最长公共子序列的区别. 最长公共子串(Longest Common Substirng):连续 最长公共子序列(Longest Common Subsequence,L ...
- [BZOJ3173][Tjoi2013]最长上升子序列
[BZOJ3173][Tjoi2013]最长上升子序列 试题描述 给定一个序列,初始为空.现在我们将1到N的数字插入到序列中,每次将一个数字插入到一个特定的位置.每插入一个数字,我们都想知道此时最长上 ...
随机推荐
- arm-linux-gcc下载与安装
在RHEL 5平台上安装配置arm-linux-gcc 2011-02-23 19:35:40| 分类: 嵌入式开发环境 | 标签: |字号大中小 订阅 . 在linux平台上安装好的基础上,开 ...
- Magento给产品添加“new”或者折扣数量标签 magento new label. discount label
文章最底部有效果图. 给新产品添加“new”的标签.给折扣产品,显示出折扣的数量. 这个可以自己写一段代码加在到模板文件夹下面的catalog/product/list.phtml中. 以下是代码 & ...
- android优化原理
时间换时间: 数据的异步载入 分批载入. 开机加速. 时间换空间: 分页. 空间换时间: everything.exe 音乐 图库 在开机启动后, sd卡被挂载 生成数据库. 空间换空间: 8G内存 ...
- Re-installation failed due to different application signatures.
出现此问题是由于apk的签名不同所致(假设不知道签名是什么 请看上一篇Android应用程序签名 debug签名).假设你是使用的自己的签名,那就是你新版本号的apk使用的签名文件与上一版本号(也就 ...
- 【Android】 -- 使用UncaughtExceptionHandler捕捉全局异常
在综合统计SDK(欧盟统计局的朋友,百度统计)之后.有一个非常有利的功能测试:错误分析.此功能可以在程序的执行中遇到崩溃(runtimeException)反馈给server,帮助开发者提高产品.多功 ...
- MySql自己定义排序
查询语句: select id,name,stauts from special where id in (50,51,52,53,54,55) order by FIELD( id ,51,50, ...
- 中间件(Middleware)
中间件(Middleware) ASP.NET Core开发,开发并使用中间件(Middleware). 中间件是被组装成一个应用程序管道来处理请求和响应的软件组件. 每个组件选择是否传递给管道中的下 ...
- 解决 Android SDK Manager不能下载旧版本的sdk的问题
解决无法使用Android SDK Manager下载SDK开发包的解决办法. 当我们在官网下载google的集成ADT,也就是adt-bundle-linux-x86.zip开发包,进行解压, 打 ...
- Delphi图像处理 -- 最大值
阅读提示: <Delphi图像处理>系列以效率为侧重点,一般代码为PASCAL,核心代码采用BASM. <C++图像处理>系列以代码清晰,可读性为主,全部使用C ...
- Swift - 启动时的向导页(新手引导)的制作
在很多iOS产品或者一些应用版本的升级中,新手指导都是一个常用的功能,通过说明页的左右滑动,可以很清晰的展示系统的一些功能特性.制作思路如下: 1,如何检测应用是第一次登陆启动 我们可以使用NSUse ...