The All-purpose Zero

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 112    Accepted Submission(s): 44

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

Hint

In the first case,you can change the second 0 to 3.So the longest increasing subsequence is 0 1 2 3 5.

Author
FZU
Source
2016 Multi-University Training Contest 4
Recommend
wange2014   |   We have carefully selected several similar problems for you:  5775 5774 5772 5771 5770

题目大意:
    输入一个整数序列,其中0可以替换成 任意一个整数。求最大严格上升子序列。

解题思路:
    如果0不可以换,那么就是一个LIS问题,可是如果0可以替换那么就不能直接dp了。因为0可以换成任意一个数,所以我们可以先把0取出,对剩下的进行LIS,最后再把0的个数加上,不过这样不能保证严格递增。所以,我们需要将每一个非0点数字减去它前面0的个数,再进行LIS就可以保证加入0后也是严格递增的了。

附AC代码:

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
#include <vector>
using namespace std;
#define INF 0x3f3f3f3fconst int maxn=100000+5;
int a[maxn],dp[maxn];int main()
{int T;scanf("%d",&T);for(int tt=1;tt<=T;++tt){int n,num=0;scanf("%d",&n);for(int i=0;i<n;++i){scanf("%d",&a[i]);if(a[i]==0)//去掉0{++num;--n;--i;}else a[i]-=num;//减去前面0的个数}memset(dp,0x3f,sizeof dp);for(int i=0;i<n;++i)//O(n * log n)的LIS*lower_bound(dp, dp+n, a[i])=a[i];printf("Case #%d: %d\n",tt,(int)(lower_bound(dp, dp+n, INF)-dp)+num);}return 0;
}

HDU 5773 The All-purpose Zero (DP)相关推荐

  1. 【 HDU - 5459】Jesus Is Here(dp)

    题干: I've sent Fang Fang around 201314 text messages in almost 5 years. Why can't she make sense of w ...

  2. HDU6578 2019HDU多校训练赛第一场 1001 (dp)

    HDU6578 2019HDU多校训练赛第一场 1001 (dp) 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6578 题意: 你有n个空需要去填,有 ...

  3. HDU-1284:钱币兑换问题 推理+动态规划(dp)

    文章目录 题目大意: 题目链接HDU 1284(点击可进入网页提交) 在一个国家仅有1分,2分,3分硬币,将钱N兑换成硬币有很多种兑法.请你编程序计算出共有多少种兑法. 输入: 每行只有一个正整数N, ...

  4. 求三角形最大面积(DP)

    求三角形最大面积(DP) 在OJ上奇迹般WA了:WA:70. Why? #include <iostream> #include <string.h> using namesp ...

  5. LeetCode 编辑距离 II(DP)

    1. 题目 给你两个单词 s 和 t,请你计算出将 s 转换成 t 所使用的最少操作数. 你可以对一个单词进行如下两种操作: 删除一个字符 替换一个字符 注意: 不允许插入操作 题目保证有解 示例: ...

  6. LeetCode 1220. 统计元音字母序列的数目(DP)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个整数 n,请你帮忙统计一下我们可以按下述规则形成多少个长度为 n 的字符串: - 字符串中的每个字符都应当是小写元音字母('a', 'e', 'i ...

  7. LeetCode 265. 粉刷房子 II(DP)

    文章目录 1. 题目 2. 解题 1. 题目 假如有一排房子,共 n 个,每个房子可以被粉刷成 k 种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同. 当然,因为市场上不同颜色油 ...

  8. LeetCode 256. 粉刷房子(DP)

    文章目录 1. 题目 2. 解题 1. 题目 假如有一排房子,共 n 个,每个房子可以被粉刷成红色.蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其与相邻的两个房子颜色不能相同. 当然,因 ...

  9. LeetCode 1223. 掷骰子模拟(DP)

    1. 题目 有一个骰子模拟器会每次投掷的时候生成一个 1 到 6 的随机数. 不过我们在使用它时有个约束,就是使得投掷骰子时,连续 掷出数字 i 的次数不能超过 rollMax[i](i 从 1 开始 ...

  10. LeetCode 1155. 掷骰子的N种方法(DP)

    1. 题目 这里有 d 个一样的骰子,每个骰子上都有 f 个面,分别标号为 1, 2, -, f. 我们约定:掷骰子的得到总点数为各骰子面朝上的数字的总和. 如果需要掷出的总点数为 target,请你 ...

最新文章

  1. 卸载虚拟机出现用户已存在的错误_极限 JVM (1) 虚拟机规范
  2. R语言:如何快速生成许多差异明显的颜色?
  3. 谭浩强课后题之----输出10个数中最大的
  4. ClickOnce 部署概述
  5. JS 获取随机颜色值
  6. php iis日志分析,星外系统IIS日志分析常用的几个命令小结
  7. 问题四十九:怎么用ray tracing画supertoroid(超级圆环)
  8. Flutter - 底部导航详解与案例示范
  9. DeepStream不支持多 RTSP源(多个摄像头)
  10. python和java那个更难_python难还是java难
  11. 本地与服务器文件同步软件哪个好,同步软件哪个好,亲身体验的3款免费同步软件介绍...
  12. cpp-http 库的使用
  13. 程序人生 | 记一次裸辞,裸辞需三思而后行!
  14. 仰望星空不如脚踏实地
  15. 「CF1154F」Shovels Shop【背包DP】
  16. Windows11 无法显示office图标
  17. 4个小方法,让你的抖音发出来的视频更清楚
  18. 2021年PHP最新面试题(一)
  19. 均方误差(mean-square error, MSE)
  20. python爬b站评论_一个简单的爬取b站up下所有视频的所有评论信息的爬虫

热门文章

  1. java语言如何将小写字母转化为大写_java中如何把大写字母转换成小写字母,小写字母转换成大写字母...
  2. java读取服务器上文件,java 读取linux服务器上文件
  3. 惠普笔记本电脑重装系统后找不到引导设备
  4. 阈值Java_阈值处理(深入学习)
  5. cdr 表格自动填充文字_CDR插件表格安装教程
  6. ubuntu16.04 独立显卡驱动安装
  7. Linux查看Nvidia显卡型号
  8. c语言点阵输出字母,单片机C语言程序设计:8X8LED 点阵显示数字
  9. 医院管理系统数据库,课程设计,SQLserver,纯代码设计
  10. 兜兜转转,华为与李一男终于在汽车行业重逢,两者将展开决战?