HDOJ(HDU).1025 Constructing Roads In JGShining's Kingdom (DP)
2024-08-30 01:19:59
HDOJ(HDU).1025 Constructing Roads In JGShining’s Kingdom (DP)
题目分析
题目大意就是给出两两配对的poor city和rich city,求解最多能修几条不相交的路。此题可以转化为LIS问题。转化过程如下:
数据中有2列,为方便表述,暂且叫做第一列和第二列。
1.若第一列是是递增的(给出的2个样例都是递增的),那么要想尽可能多的做连线,则那么就需要找出第二列中最长的递增子序列,若出现非递增的序列,那么连线后一定会相交。
2.若第一列不是递增的,排序后按照1分析即可。
综上所述,题目便转换成LIS问题。
LIS有2种写法,一种是o(n²)的写法,一种是o(nlogn)的写法。题目中给出n<=500,500.采用o(n²)必定超时,最佳策略是o(nlogn)。
推荐一篇介绍这种写法的博文 最长上升子序列nlogn算法。通俗易懂,在此就不赘述如何设计此算法了。
代码总览
/*
Title:HDOJ.1025
Author:pengwill
Date:2017-2-15
*/
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#define nmax 500005
using namespace std;
int a[nmax],dp[nmax];
int BS(int dt[],int t[],int left, int right,int i)
{
int mid;
while(left<right){
mid = (left+right)/2;
if(dt[mid]>=t[i]) right = mid;
else left = mid+1;
}
return left;
}
int main()
{
// freopen("in.txt","r",stdin);
int n,t = 0;
while(scanf("%d",&n) != EOF){
printf("Case %d:\n",++t);
int x,y;
for(int i = 1;i<=n; ++i){scanf("%d%d",&x,&y);a[x] = y;}
dp[1] = a[1];
int len=1;
// for(int i = 1; i<=n; ++i){
// int m = 0;
// for(int j = 1; j<i ;++j ){
// if(a[i]>a[j] && dpa[j]>m)
// m = dpa[j];
// }
// dpa[i] = m+1;
// }
for(int i = 2; i<=n;++i){
if(a[i]>dp[len]) dp[++len] = a[i];
else{
int pos = BS(dp,a,1,len,i);
dp[pos] = a[i];
}
}
if(len == 1) printf("My king, at most 1 road can be built.\n\n");
else printf("My king, at most %d roads can be built.\n\n",len);
}
return 0;
}
最新文章
- ZKWeb网站框架的动态编译的实现原理
- flexbox实现不等宽不等高的瀑布流布局
- POJ 1016 模拟字符串
- DP:炮兵阵地问题(POJ 1185)
- 使用multimap创建重复键关联容器
- linux磁盘设备知识
- xshell连接本地Linux虚拟机!
- [转载] cookie、JS记录及跳转到页面原来的位置
- iOS中获取各种文件的目录路径和文件
- Android中获取电池电量
- xlrd doc
- 分析java堆
- Swift大写和小写字符串
- 利用MMdnn对比keras和mxnet
- eclipse中js报错简单快捷的解决方式
- REdis主挂掉后复制节点才起来会如何?
- win32网络模型之重叠I/O
- Add custom field in Material Master
- JSONObject的toBean 和 fromObject
- Runway for Mac(UML 流程图绘图工具)破解版安装
热门文章
- ElasticSearch-Java-low-level-rest-client官方文档翻译
- C 基本运算
- 服务器返回中文乱码的情况(UTF8编码 ->; 转化为 SYSTEM_LOCALE 编码)
- Python-3.6 安装pycrypto 2.6
- 【第五章】MySQL数据库的安全机制
- 【机器学习】多项式回归sklearn实现
- 官方文档 恢复备份指南三 Recovery Manager Architecture
- POJ 1113 Wall(计算几何の凸包)
- canvas学习(二):渐变与曲线的绘制
- 自测之Lesson8:进程操作