zoukankan      html  css  js  c++  java
  • hdoj--5256--序列变换(lis变形)

    序列变换

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 1041    Accepted Submission(s): 401



    Problem Description
    我们有一个数列A1,A2...An,你现在要求修改数量最少的元素,使得这个数列严格递增。其中无论是修改前还是修改后,每个元素都必须是整数。
    请输出最少需要修改多少个元素。
     

    Input
    第一行输入一个T(1T10),表示有多少组数据

    每一组数据:

    第一行输入一个N(1N105),表示数列的长度

    第二行输入N个数A1,A2,...,An

    每一个数列中的元素都是正整数而且不超过106
     

    Output
    对于每组数据,先输出一行

    Case #i:

    然后输出最少需要修改多少个元素。
     

    Sample Input
    2 2 1 10 3 2 5 4
     

    Sample Output
    Case #1: 0 Case #2: 1
     

    Source
    2015年百度之星程序设计大赛 - 初赛(2)

    /**
    LIS(非严格):首先我想到了LIS,然而总觉得有点不对;每个数先减去它的下标,防止下面的情况发生:(转载)
    加入序列是1,2,2,2,3,这样求上升子序列是3,也就是要修改2个,但是中间的两个2,变化范围又不能超过(1,3)
    那么这样求的也就不对,但是减掉之后,相当于给中间重复的数留下了修改的空间
    解释下为什么可以减而保持正确性:因为题目所求时严格递增,假设是2,3, 4,那么变成1, 1, 1,所以在LIS里非严格递增就可以了
    这也是为什么要在upper_bound的位置插入
    另外:lower_bound返回第一个>=key的位置;upper_bound返回第一个>key的位置,这样相减才是key的个数
    */
    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    int n;
    int a[100100],dp[100100];
    int lis()
    {
    	int top=1,j;
    	dp[1]=a[1];
    	for(int i=2;i<=n;i++)
    	{
    		if(dp[top]<=a[i])
    		dp[++top]=a[i];
    		else
    		{
    			j=upper_bound(dp+1,dp+top+1,a[i])-dp;
    			dp[j]=a[i];
    		}
    	}
    	return top;
    }
    int main()
    {
    	int t;
    	int Case=1;
    	scanf("%d",&t);
    	while(t--)
    	{
    		memset(dp,0,sizeof(dp));
    		memset(a,0,sizeof(a));
    		scanf("%d",&n);
    		for(int i=1;i<=n;i++)
    		{
    			scanf("%d",&a[i]);
    			a[i]-=i;
    		}
    		printf("Case #%d:
    ",Case++);
    		printf("%d
    ",n-lis());
    	}
    	return 0;
    }


     
  • 相关阅读:
    MiniUI 在线示例(gridview)
    数据库的事务处理和并发控制
    数据库大并发操作要考虑死锁和锁的性能问题
    c# 财务报表数字转大写的方法
    js 实现打印功能1
    js 实现打印功能
    《C++ Primer 4th》读书笔记 序
    谈谈Vim中实用又好记的一些命令
    《Unix网络编程》卷2 读书笔记 第3章- System V IPC
    《Unix网络编程》卷2 读书笔记 第2章- Posix IPC
  • 原文地址:https://www.cnblogs.com/playboy307/p/5273668.html
Copyright © 2011-2022 走看看