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控制设计
两轮自平衡小车的研究意义 ...
随机推荐
- 为什么CNN能自动提取图像特征
1.介绍 在大部分传统机器学习场景里,我们先经过特征工程等方法得到特征表示,然后选用一个机器学习算法进行训练.在训练过程中,表示事物的特征是固定的. 后来嘛,后来深度学习就崛起了.深度学习对外推荐自己 ...
- PAT 1009 说反话 (20)(代码)
1009 说反话 (20)(20 分) 给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出. 输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串.字符串由若干单词和若干空 ...
- Eclipse.Error.gen already exists but is not a source folder.
在Eclipse ADT来开发Android App时会遇到以下问题:"myproject/gen already exists but is not a source folder. Co ...
- Codeforces 749C. Voting 模拟题
C. Voting time limit per test: 1 second memory limit per test: 256 megabytes input: standard input o ...
- android-如何获得当前正在运行的activity的相关信息
http://blog.csdn.net/centralperk/article/details/7269326 ActivityManager manager = (ActivityManager) ...
- 深入C# String类
深入C# String类 C#中的String类 他是专门处理字符串的(String),他在System的命名空间下,在C#中我们使用的是string 小写的string只是大写的String的一个别 ...
- unity的三种update
void FixedUpdate () 固定更新 void Update () 更新 void LateUpdate() 晚于更新 FixedUpdate () 和 Update () ...
- 用rpm命令安装定时器crontab
crontab -l command not found 准备以下安装包: ls -l总用量 1004-rw-r--r-- 1 root root 76296 10月 9 16:01 croni ...
- 核心一:IoC
IoC 1.中文名称:控制反转 2.英文名称:(Inversion of Control) 3.IoC是什么? 3.1 IoC 完成的事情原先由程序员主动通过new 实例化对象事情,转交给Spring ...
- oracle 导出表
由于进项目组是跟着dba做事情的,但是没做多久dba走了,差不多就把数据库方面的“杂事”接下来了. 小白一个,只有敬小慎微的操作.经常看到的高水位和低水位的情况,也不敢去乱动. 搞好今天晚上需要跑数据 ...