HDU1025贫富平衡
做01背包做到的这个LIS,常见的n2会超时,所以才有nlogn可行
先来介绍一下n2
dp[i] 表示该序列以a[i]为结尾的最长上升子序列的长度
所以第一层循环循环数组a,第二层循环循环第i个元素前面的元素,里面做一个基本升序判断,然后找最大值
定义一个外部变量记录最大值
nlogn
用了一个数组进行维护对于每一个新加入的数,如果比这个数组中的所有元素都大,那么该数加入数组,如果有比这个数大的,则用该数替换第一个比他大的数
奈何这个题最坑的地方是输出!
#include <iostream>
#include <cstdio>
#include <string.h>
#include <algorithm>
#include <cmath>
using namespace std;
const int maxn = 5e5 + 5e3;
int dp[maxn],dp_idx;
struct node{
int p,r;
}data[maxn];
bool cmp(node a,node b)
{
return a.p < b.p;
}
int get_idx(int left,int right,int num)
{
while(left <= right)
{
int mid = (left + right) >> 1;
if(dp[mid] > num)right = mid - 1;
else left = mid + 1;
}
return right+1;
}
int main()
{
int n;
int cas = 1;
while(~scanf("%d",&n))
{
for(int i = 0;i < n;i++)
scanf("%d%d",&data[i].p,&data[i].r); //sort(data,data+n,cmp);不用排序,将无序的存储到有序的数组里就可以
// for(int i = 0;i < n;i++)
// printf("%d %d\n",data[i].p,data[i].r);
memset(dp,0,sizeof(dp));
dp[0] = data[0].r;
dp_idx = 0;
for(int i = 1;i < n;i++)
{
if(data[i].r > dp[dp_idx])
{
dp[++dp_idx] = data[i].r;
}
else
{
int idx = get_idx(0,dp_idx,data[i].r);
//cout<<"idx = "<<idx<<endl;
dp[idx] = data[i].r;
}
}
// for(int i = 0;i <= dp_idx;i++)
// {
// printf("%d\n",dp[i]);
// }
printf("Case %d:\nMy king, at most %d ",cas++,dp_idx+1);
if(dp_idx+1 > 1)
printf("roads can be built.\n\n");
else
printf("road can be built.\n\n");
}
return 0;
}
HDU1025贫富平衡的更多相关文章
- 捕获起英文名Edda的灵感来源,我的心愿是程序员这个行业能够男女人数平衡
在腾讯的暑期训练营结识过不少鹅厂的前辈,他们对我的成长提供了很大的帮助,可以说有着知遇之恩,大部分现在还保持着联系,请教问题时会不吝赐教,以至于就在前两天11号企鹅18岁的成年礼,朋友圈刷满了领腾讯总 ...
- Java数据结构——平衡二叉树的平衡因子(转自牛客网)
若向平衡二叉树中插入一个新结点后破坏了平衡二叉树的平衡性.首先要找出插入新结点后失去平衡的最小子树根结点的指针.然后再调整这个子树中有关结点之间的链接关系,使之成为新的平衡子树.当失去平衡的最小子树被 ...
- AVL树的平衡算法(JAVA实现)
1.概念: AVL树本质上还是一个二叉搜索树,不过比二叉搜索树多了一个平衡条件:每个节点的左右子树的高度差不大于1. 二叉树的应用是为了弥补链表的查询效率问题,但是极端情况下,二叉搜索树会无限接近 ...
- 浅谈算法和数据结构: 十 平衡查找树之B树
前面讲解了平衡查找树中的2-3树以及其实现红黑树.2-3树种,一个节点最多有2个key,而红黑树则使用染色的方式来标识这两个key. 维基百科对B树的定义为“在计算机科学中,B树(B-tree)是一种 ...
- 平衡二叉查找树(AVL)的理解与实现
AVL树的介绍 平衡二叉树,又称AVL(Adelson-Velskii和Landis)树,是带有平衡条件的二叉查找树.这个平衡条件必须要容易保持,而且它必须保证树的深度是 O(log N).一棵AVL ...
- Constructing Roads In JGShining's Kingdom(HDU1025)(LCS序列的变行)
Constructing Roads In JGShining's Kingdom HDU1025 题目主要理解要用LCS进行求解! 并且一般的求法会超时!!要用二分!!! 最后蛋疼的是输出格式的注 ...
- Windows Server 2008 R2 负载平衡入门篇
一.简单介绍负载均衡 负载均衡也称负载共享,它是指负载均衡是指通过对系统负载情况进行动态调整,把负荷分摊到多个操作节点上执行,以减少系统中因各个节点负载不均衡所造成的影响,从而提高系统的工作效率.在常 ...
- 转 浅谈算法和数据结构: 十 平衡查找树之B树
前面讲解了平衡查找树中的2-3树以及其实现红黑树.2-3树种,一个节点最多有2个key,而红黑树则使用染色的方式来标识这两个key. 维基百科对B树的定义为"在计算机科学中,B树(B-tre ...
- 两轮自平衡小车双闭环PID控制设计
两轮自平衡小车的研究意义 ...
随机推荐
- LINUX查看网卡UUID
有时我们不小心将/etc/sysconfig/network-scripts/ifcfg-eth0(可以通过此文件进行查看UUID)删除或者损坏,要重新编辑ifcfg-eth0文件时不知道网卡的UUI ...
- spring batch批处理框架学习
内如主要来自以下链接: http://www.importnew.com/26177.html http://www.infoq.com/cn/articles/analysis-of-large-d ...
- BZOJ1051或洛谷2341 [HAOI2006]受欢迎的牛
BZOJ原题链接 洛谷原题链接 显然在一个强连通分量里的奶牛都可以相互喜欢,所以可以用\(tarjan\)求强连通并缩点. 要求明星奶牛必须被所有人喜欢,显然缩点后的图必须满足只有一个点没有出度,因为 ...
- Luogu 2051[AHOI2009]中国象棋 - DP
Description 在 $n * m$ 的格子上放若干个炮, 使得每个炮都不能攻击到其他炮 Solution 定义数组f[ i ][ j ][ k ] 表示到了第 i 行, 已经有2个炮的列数为 ...
- python 截取某一天的日志,简单操作
#!/usr/bin/python #Filename: Segmentation_log.py import re,sys def openfile(*args): try: f=open(args ...
- Spring Environment(二)源码分析
Spring Environment(二)源码分析 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.html) Spring Envi ...
- 再读c++primer plus 005
对象和类: 1.类和结构的唯一区别是结构的默认访问类型是public,而类为private: 2.其定义位于类声明中的函数都将自动成为内联函数,也可以在类声明外定义成员函数,并使其成为内联函数,为此只 ...
- kbmmw 5.06.00 beta 发布
原生.高效.可扩展.跨平台通信库来了. we are happy to announce v5.06.00 BETA of our popular middleware for Delphi and ...
- git .gitignore未生效
添加进.gitignore的问题未生效. .gitignore只会忽略在.gitignore编写之后的未跟踪(untrack)文件,而在编写.gitignore之前已经add and commit的文 ...
- flask框架基础
一 web的一些框架介绍 Flask:短小精悍,内部没有包含多少组件,但是第三方的组件是非常丰富的. Django:django是一个重武器,内部包含了非常多的组件:orm,form,modelFor ...