博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu-5773 The All-purpose Zero(LIS)
阅读量:4985 次
发布时间:2019-06-12

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

题目链接:

Time Limit: 2000/1000 MS (Java/Others)   

 Memory Limit: 65536/65536 K (Java/Others)

Problem Description
 
?? gets an sequence S with n intergers(0 < n <= 100000,0<= S[i] <= 1000000).?? has a magic so that he can change 0 to any interger(He does not need to change all 0 to the same interger).?? wants you to help him to find out the length of the longest increasing (strictly) subsequence he can get.
 

 

Input
 
The first line contains an interger T,denoting the number of the test cases.(T <= 10)
For each case,the first line contains an interger n,which is the length of the array s.
The next line contains n intergers separated by a single space, denote each number in S.
 

 

Output
 
For each test case, output one line containing “Case #x: y”(without quotes), where x is the test case number(starting from 1) and y is the length of the longest increasing subsequence he can get.
 

 

Sample Input
 
2
7
2 0 2 1 2 0 5
6
1 2 3 3 0 0
 

 

Sample Output
 
Case #1: 5
Case #2: 5
 
题意:
 
给一个序列,这里面的0可以变成任何整数;问能得到的LIS的长度是多少;
 
思路:
 
是题解给的思路,当时一直想不通的是如这样的  4 0 5的序列,0夹在两个相邻整数之间,怎么0就会全部用上了呢?后来才知道可以把0当成后面的那个5啊,所以说0才会全部用上;这是一个关键点,0全部用上,然后求LIS的时候先把0都拿走,当是要给这些0留下空间,怎么办呢?就是每个数减去它前边0的个数,这时两个数的差与之前的差相比,减少了这两个数之间0的个数;所以才保证了既是单调,又让0一定在其中;
 
AC代码:
 
/************************************************ ┆  ┏┓   ┏┓ ┆    ┆┏┛┻━━━┛┻┓ ┆ ┆┃       ┃ ┆ ┆┃   ━   ┃ ┆ ┆┃ ┳┛ ┗┳ ┃ ┆ ┆┃       ┃ ┆  ┆┃   ┻   ┃ ┆ ┆┗━┓    ┏━┛ ┆ ┆  ┃    ┃  ┆       ┆  ┃    ┗━━━┓ ┆ ┆  ┃  AC代马   ┣┓┆ ┆  ┃           ┏┛┆ ┆  ┗┓┓┏━┳┓┏┛ ┆ ┆   ┃┫┫ ┃┫┫ ┆ ┆   ┗┻┛ ┗┻┛ ┆       ************************************************ */  #include 
#include
#include
#include
#include
#include
#include
using namespace std;#define For(i,j,n) for(int i=j;i<=n;i++)#define mst(ss,b) memset(ss,b,sizeof(ss));typedef long long LL;template
void read(T&num) { char CH; bool F=false; for(CH=getchar();CH<'0'||CH>'9';F= CH=='-',CH=getchar()); for(num=0;CH>='0'&&CH<='9';num=num*10+CH-'0',CH=getchar()); F && (num=-num);}int stk[70], tp;template
inline void print(T p) { if(!p) { puts("0"); return; } while(p) stk[++ tp] = p%10, p/=10; while(tp) putchar(stk[tp--] + '0'); putchar('\n');}const LL mod=20071027;const double PI=acos(-1.0);const int inf=1e9;const int N=1e5+100;const int maxn=(1<<8);const double eps=1e-8;int a[N],sum,d[N],g[N];int main(){ int t,Case=0; read(t); while(t--) { int n,cnt=0,x; read(n); sum=0; For(i,1,n) { read(x); if(x==0)sum++; else a[++cnt]=x-sum; g[i]=inf; } int ans=0; For(i,1,cnt) { int temp=lower_bound(g+1,g+cnt+1,a[i])-g; g[temp]=a[i]; ans=max(ans,temp); } printf("Case #%d: %d\n",++Case,ans+sum); } return 0;}

  

转载于:https://www.cnblogs.com/zhangchengc919/p/5717409.html

你可能感兴趣的文章
Hadoop HDFS学习总结
查看>>
C#wxpay和alipay
查看>>
Combination Sum
查看>>
WCF开发框架形成之旅---结合代码生成工具实现快速开发
查看>>
Spring事务管理
查看>>
JS||JQUERY常用语法
查看>>
talend hive数据导入到mysql中
查看>>
ORA-01093: ALTER DATABASE CLOSE only permitted with no sessions connected
查看>>
linux下mysql配置文件my.cnf详解
查看>>
获取微信用户列表Openid
查看>>
架构必备词汇
查看>>
SublimeText快捷键操作
查看>>
Python开发 基礎知識 (未完代補)
查看>>
监听器的使用,以及实现, 测试
查看>>
java基础二 分支循环
查看>>
python--002--数据类型(list、tuple)
查看>>
把近期的小错误整理一下
查看>>
动态规划 —— 背包问题一 专项研究学习
查看>>
51nod 1571 最近等对 | 线段树 离线
查看>>
关于parseInt的看法
查看>>