zoukankan      html  css  js  c++  java
  • HDU5256: 序列变换

    Description

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

    Input

    第一行输入一个,表示有多少组数据 

    每一组数据: 

    第一行输入一个,表示数列的长度 

    第二行输入N个数。 

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

    Output

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

    Case #i: 

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

    Sample Input

    2
    2
    1 10
    3
    2 5 4

    Sample Output

    Case #1:
    0
    Case #2:
    

    1

    看这个题第一个想法就是求出最大递增子序列的长度len 然后n-len 肯定不会这么简单

    举个例子 2 3 4 4 4 5 最大递增序列为2 3 4 5 按上面的说法修改2次就可以 而这个却至少需要3次

    顺序是不能动的 只能改变数字大小 为了避免这种情况 我们让每个数减去他的ip s[i]=s[i]-i

    上面的例子就变成 2 1 1 1 -1 -1

    这样做到第i个位置最少要比i+1个位置少1,而i最少要比i+2的位置少2,这样的话,直接处理好了所有的位置关系,处理好之后我们就直接n-最大非递减子序列就行了(注意不是最大递增子序列) 还有注意可以用二分贪心的那个方法,普通暴力的方法会超时

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    int a[100001];
    int b[100001];
    int d[100001];
    int main()
    {
       int t,ans=0;;
       scanf("%d",&t);
       while(t--)	
       {
       	ans++;
       	int n;
       	scanf("%d",&n);
       	for(int i=1;i<=n;i++)
       	{
       		scanf("%d",&a[i]);
       		b[i]=a[i]-i;
    	   }
    	    int len=1;
    	          d[1]=b[1];
    		for(int i=2;i<=n;i++)
    		{
    		  if(b[i]>=d[len])//这里求的是非递减序列 
    		  {
    		  	len++;
    		  	d[len]=b[i];
    		   } 
    		   else
    		   {
    		   	int l=1;
    		   	int r=len;	
    			int mid;
    			int cut;
    		   	while(l<=r)
    		   	{
    		   	 mid =(l+r)/2;
    		   		if(b[i]<d[mid])
    		   		{
    		   			cut=mid;
    		   			r=mid-1;
    				     }
    				   else
    				   {
    				   	l=mid+1;
    				        }
    			   }
    			   d[cut]=b[i];
    		    }
    		}
    		printf("Case #%d:
    ",ans);
    		printf("%d
    ",n-len);
       }
    	return 0;
    } 


  • 相关阅读:
    du 命令计算隐藏文件夹或文件
    QEMU中VIRTIO实现
    virtio_blk
    网络虚拟化Virtio-net
    virtio desc
    vhost dpdk 共享内存
    gvisor 信号处理
    Java idea 执行单个测试方法
    Java idea 创建User.xml,需要新增一个mybatis-mapper.xml模板
    Java idea 创建log4j.properties
  • 原文地址:https://www.cnblogs.com/kingjordan/p/12027063.html
Copyright © 2011-2022 走看看