HDOJ 5256 序列变换
来源:互联网 发布:冈本淘宝旗舰店可靠吗 编辑:程序博客网 时间:2024/06/05 21:56
序列变换
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1388 Accepted Submission(s): 523
Problem Description
我们有一个数列A1,A2...An,你现在要求修改数量最少的元素,使得这个数列严格递增。其中无论是修改前还是修改后,每个元素都必须是整数。
请输出最少需要修改多少个元素。
请输出最少需要修改多少个元素。
Input
第一行输入一个T(1≤T≤10) ,表示有多少组数据
每一组数据:
第一行输入一个N(1≤N≤105) ,表示数列的长度
第二行输入N个数A1,A2,...,An
每一个数列中的元素都是正整数而且不超过106 。
每一组数据:
第一行输入一个
第二行输入N个数
每一个数列中的元素都是正整数而且不超过
Output
对于每组数据,先输出一行
Case #i:
然后输出最少需要修改多少个元素。
Case #i:
然后输出最少需要修改多少个元素。
Sample Input
221 1032 5 4
Sample Output
Case #1:0Case #2:1
Source
2015年百度之星程序设计大赛 - 初赛(2)
Recommend
hujie
题目粘的依旧是大写的惨,可以点这里看(点我!)原题
这个题是个中文的,意思已经很明确了。我们可以把这个问题转换成求一个最长非严格上升子序列的长度的问题。
推导过程大致如下:a[i] < a[i+1] ——> a[i] <= a[i+1]-1 ——> a[i]-i <= a[i+1]-(i+1)
令b[i]=a[i]-i
所以只用求b[i]中最长非严格上升子序列的长度。(推理不太明白的话,可以自己动手算一下)
#include<stdio.h>#include<string.h>#include<algorithm>#include<vector>using namespace std;#define N 100000+10int a[N],dp[N];int main(){int T,kcase=1;int i,n;scanf("%d",&T);while(T--){scanf("%d",&n);for(i=0;i<n;i++){scanf("%d",&a[i]);a[i]-=i;}int len=0;for(i=0;i<n;i++){if(dp[len]<=a[i]){dp[++len]=a[i];continue;}int k=upper_bound(dp+1,dp+len+1,a[i])-dp;dp[k]=a[i];}printf("Case #%d:\n",kcase++);printf("%d\n",n-len);}return 0;}
0 0
- HDOJ 5256 序列变换
- HDOJ 5256 序列变换
- hdoj--5256--序列变换(lis变形)
- hdoj 5256 序列变换 【LIS 变形】
- hdoj 5256 序列变换 (LIS变形)
- HDOJ-----5256序列变换(LIS)
- HDOJ 5428 序列变换
- hdoj 5248 序列变换 【贪心 + 二分】
- hdoj 5248 序列变换 【贪心 + 二分】
- hdoj 5048 序列变换 (二分查找)
- Hdu 5256 序列变换
- hdu 5256 序列变换
- HUD 5256 序列变换
- HDU 5256 序列变换
- HDU 5256 序列变换
- HDU 5256 序列变换
- HDU 5256 序列变换
- HDOJ/HDU 5248 序列变换(DP,LIS)
- mysql分组后获得每个分组记录数
- css3 flex流动自适应响应式布局实例2
- 使用xp_readerrorlog审计失败及成功的登录
- linux获取系统信息(sysinfo函数的使用)
- SharedPreFerences实现数据存储存储
- HDOJ 5256 序列变换
- ViewGroup---View
- 【NOI2001T1】食物链-并查集
- Face Alignment at 3000 FPS via Regressing Local Binary Features(CVPR2014)读后感(first pass)
- 数据结构与算法(2)顺序表
- 华为oj--走格子
- HDU 5584 青蛙跳跳跳 小小的数论题
- leetcode 50 Pow(x, n)
- EL表达式遍历存了数组的集合