博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDOJ 1025 DP+二分
阅读量:6154 次
发布时间:2019-06-21

本文共 1317 字,大约阅读时间需要 4 分钟。

本题求最大上升子序列,这个很容易看出来。数据大小是50万,所以不能用O(n^2)的方法来求。因为1000万以上次循环就可能超时。

若用二分来解决,时间复杂度为O(nlogn)。

代码使用了我认为的最经典的二分形式。

 

#include 
using namespace std;const int MAXCITYNUM = 500005;int poorCity[MAXCITYNUM],ans[MAXCITYNUM];int main (){
int caseNum = 1,cityNum; while (scanf("%d",&cityNum) != -1) { int richCity; for (int i = 1;i <= cityNum;i ++)/* 没说数据按rich city的编号由小到大给出 */ { scanf("%d",&richCity); scanf("%d",&poorCity[richCity]); } ans[1] = poorCity[1]; int low,high,mid,len = 1; for (int i = 2;i <= cityNum;i ++) { low = 1 , high = len; while (low <= high) { mid = (low + high) / 2; if (ans[mid] >= poorCity[i]) high = mid - 1; else low = mid + 1; } ans[low] = poorCity[i]; if (low == (len + 1)) len ++; } printf("Case %d:\n",caseNum); caseNum ++; if (len == 1)/* 注意细节 */ printf("My king, at most %d road can be built.\n",len); else printf("My king, at most %d roads can be built.\n",len); printf("\n"); } return 0;}

转载于:https://www.cnblogs.com/peaceful-andy/archive/2012/08/06/2625808.html

你可能感兴趣的文章
debian 安装 php 遇到的问题解决
查看>>
BDB (Berkeley DB)数据库简单介绍(转载)
查看>>
Java Swing 探索(一)LayoutManager
查看>>
数据库原理 知识点总结
查看>>
3D数学读书笔记——矩阵进阶
查看>>
C柔性数组
查看>>
Python 类继承,__bases__, __mro__, super
查看>>
(十五)WebGIS中平移功能的设计和实现
查看>>
matlab练习程序(三阶张量T-QR分解)
查看>>
百钱买百鸡
查看>>
EditText图文混排
查看>>
Mysql,ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'
查看>>
html5 audio音频播放全解析
查看>>
Android 安全提示 笔记
查看>>
android中的textview显示汉字不能自动换行的一个解决办法
查看>>
程序局部性原理感悟
查看>>
js中document.write()使用方法
查看>>
随机生成50个字段的elasticsearch的测试程序输入
查看>>
如何使用流量精灵刷网站流量
查看>>
使用AutoMapper 处理DTO数据对象的转换
查看>>