hdu5256【序列变换】【LIS】
来源:互联网 发布:从应用程序中提取sql 编辑:程序博客网 时间:2024/05/20 19:45
我们有一个数列A1,A2...An,你现在要求修改数量最少的元素,使得这个数列严格递增。其中无论是修改前还是修改后,每个元素都必须是整数。
请输出最少需要修改多少个元素。
请输出最少需要修改多少个元素。
每一组数据:
第一行输入一个N (1 < N<10^5),表示数列的长度
第二行输入N个数A_1, A_2, ..., A_n。
每一个数列中的元素都是正整数而且不超过10^6。
Case #i:
然后输出最少需要修改多少个元素。
221 1032 5 4
Case #1:0Case #2:1
解析:
考虑序列限制条件为a[i]-a[j]>=i-j(线性非递减)
=====> a[i]-i>=a[j]-j
所以考虑建数组b[i]=a[i]-i
则问题转换为求数组b[i]的不递减序列的长度l
则最后结果为n-l+1
程序如下:
#include<cstdio> #define INF 0X3f3f3f3f;int n,l;int a[100200];int s[100200];int find(int m){ int la=0,lb=l; while(lb>=la){ int mid=(la+lb)/2; if(s[mid]>m) lb=mid-1; else la=mid+1; } return la;}int main(){ int T,Case=1; scanf("%d",&T); while(T--){ scanf("%d",&n); for(int i=1; i<=n; i++){ int t; scanf("%d",&t); a[i]=t-i; } s[0]=-INF; l=1; for(int i=1; i<=n; i++){ s[l]=INF; int t=find(a[i]); if(t==l) l++; s[t]=a[i]; } printf("Case #%d:\n",Case++); printf("%d\n",n-l+1); } return 0;}
阅读全文
0 0
- hdu5256【序列变换】【LIS】
- hdu5256 序列变换 dp LIS
- hdu5256 序列变换(LIS模型)
- HDU5256 序列变换(LIS求严格上升子序列)
- HDU5256: 序列变换
- hdu5256 序列变换
- hdu5256: 序列变换
- hdu5256 序列变换 最长递增子序列
- hdu5256序列变换(非递减子序列)
- hdoj5256序列变换【LIS】
- HDU5256 LIS变形
- Problem 5256 序列变换 【LIS】
- HDU-5256 序列变换(LIS)
- hdoj5256序列变换(LIS变形)
- hdu5256 序列变换 百度之星初赛第二场 最长上升子序列变形
- hdu5256序列严格递增
- hdu5256序列变幻
- hdu 5256 序列变换 (LIS变形)
- 【笔记篇】C#笔记2
- java nio中,HeapByteBuffer与DirectByteBuffer的区别
- jquery设置radio选中:根据单选名及值选中
- 【Spring】Hello Spring
- python 删除文件、目录
- hdu5256【序列变换】【LIS】
- 记录:使用IDEA搭建Maven+SSM的过程
- Quick Outline 和 “面包屑” 工具栏
- 重点公告!!!
- C++输出格式控制
- python实现从一组颜色中找出与给定颜色最接近颜色的方法
- React中使用highcharts画玫瑰图
- Android日历开发:日期工具类TimeUtils
- HLS