HDU 5773 (DP)
题目链接:猛戳这里
本题的关键是0的处理,0 是万能的数字,但不能重复,所以怎么好处理这个0非常关键。
于是一个思想就出来了,可不可以先不处理0,然后让a[i] 减去 i 之前 0 的个数。这样相对的大小不会改变,又 给 0 留下了位置。一举两得。
为什么可以?
举个栗子:1 0 2 0 3 0 3;
处理之后的序列为:1 1 1 0 (把 0 忽略,每一位非零 数字 - 0 的个数)
最长递增序列为 1 :
1 + 3(0的个数) = 4;
答案为四;
#include <algorithm>
#include <iostream>
#include <cstring>
#include <string>
#include <vector>
#include <cmath>
#include <deque>
#include <map>using namespace std;
typedef long long ll;#define ForU(i,a,b) for(i = a;i < b;i ++)
#define ForD(i,a,b) for(i = a;i > b; i --)
#define Max 1000001int number[Max];
int B[Max];
int len;void revise(int l,int r,int under){if(l == r){if(B[l] > number[under])B[l] = number[under]; return ;}else{int mid = (l + r) >>1;if(B[mid] >= number[under]){revise(l,mid,under);}else{revise(mid+1,r,under);}}
}int main(){int n,i,j,k,t;scanf("%d",&t);ForU(k,1,t+1){scanf("%d",&n);int sum = 0; memset(number,0,sizeof(number));ForU(i,0,n){scanf("%d",&j);if(j == 0){sum ++;}else{number[i-sum] = j - sum;}}len = 0;memset(B,0,sizeof(B));ForU(i,0,n - sum){if(len == 0 || number[i] > B[len-1]){B[len ++] = number[i];}else{revise(0,len -1,i); }}printf("Case #%d: %d\n",k,len+sum);}return 0;
} /****
2
7
2 0 2 1 2 0 5
6
1 2 3 3 0 0
10
10
8 6 2 3 9 5 2 0 1 5*****/
HDU 5773 (DP)相关推荐
- HDU 5928 DP 凸包graham
给出点集,和不大于L长的绳子,问能包裹住的最多点数. 考虑每个点都作为左下角的起点跑一遍极角序求凸包,求的过程中用DP记录当前以j为当前末端为结束的的最小长度,其中一维作为背包的是凸包内侧点的数量.也 ...
- hdu 1171 dp(多重背包)
View Code //hdu 1171 dp(多重背包)//题意:把所有物品的价值尽量分为相等的两份,不能等分的话 //后面那份可以稍小于前面的 //求出价值总和后,令价值的一半为背包容量,让背包尽 ...
- HDU 5773 The All-purpose Zero(O(nlgn)求LIS)
http://acm.hdu.edu.cn/showproblem.php?pid=5773 题意: 求LIS,其中的0可以看做任何数. 思路: 因为0可以看做任何数,所以我们可以先不管0,先求一遍L ...
- HDU 4832(DP+计数问题)
HDU 4832 Chess 思路:把行列的情况分别dp求出来,然后枚举行用几行.竖用几行,然后相乘累加起来就是答案 代码: #include <stdio.h> #include < ...
- hdu 5086(dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5086 题目大意:给出长度为n的数组,然后要求累计里面的每个子串的和. 解题思路:这道题直接枚举肯定不行 ...
- hdu 2059(dp)
龟兔赛跑 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Des ...
- HDU 3646 DP + 二分
链接:http://acm.hdu.edu.cn/showproblem.php?pid=3646 题意:你有N把武器,每把武器可以对敌人造成一定的伤害(et:攻击力500,敌人血量为200,杀死敌人 ...
- Hdu 4293 DP
题意: n个人说自己前面有多少人 后面有多少人 求出说真话人数最多的情况 每个样例有 一个 n 表示n个人 接下来 n 行有a b 表示他前面的人数和后面的人数 思路: 如果已经知道了其中一组的人数~ ...
- hdu 3905(dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3905 思路:dp[i][j]表示前i分钟,睡了j分钟收获的的最大价值,并记tmp_dp[i][j]为从 ...
- hdu 4472 dp
http://acm.hdu.edu.cn/showproblem.php?pid=4472 第一直觉找规律,第二直觉 把树拆成子树,然后递推或者DP 然后发现不行,然后才发现自己题都没读,,,, d ...
最新文章
- Echart遇到的问题:tooltip提示框大小异常
- mongodb update
- OpenCV形态学变换函数morphologyEx()开运算的使用
- linux添加中文字库主线任务,Linux 添加中文字体库
- extundelete实现Linux下文件/文件夹数据恢复!
- 一道不知道哪里来的容斥题
- pymongo根据ObjectId 查找文档记录
- matches php,PHP 正则表达式 推荐
- excel宏-自定义筛选查询
- 九秒倒计时c语言编程,可变信息倒九秒半程倒计时器的制作方法
- 提供一个中国身份证号码判断的类
- 想成为我的同事,不会点Linux怎么行!
- android imageview 拉伸图片大小,【教程】安卓保证图片长宽比的同时拉伸图片
- 加密Escape/解密Unescape
- 新版Edge如何长截图
- Paper中含有Type3的字体,需要修改为Type1字体
- 在校外使用校园网服务
- 带参数的的main函数
- 解决AE在win10/11系统上安装失败问题 AEcc2021-After Effects 2021中文正式版安装教程
- 弹弹堂拍卖场查看具体拍卖截止时间