zoukankan      html  css  js  c++  java
  • hdu 5256 最少修改多少个数 能使原数列严格递增 (LIS)

    Problem Description
    我们有一个数列A1,A2...An,你现在要求修改数量最少的元素,使得这个数列严格递增。其中无论是修改前还是修改后,每个元素都必须是整数。 请输出最少需要修改多少个元素。
    Input
    第一行输入一个T(1≤T≤10),表示有多少组数据

    每一组数据:

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

    第二行输入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

     1 # include <iostream>
     2 # include <cstdio>
     3 # include <cstring>
     4 # include <algorithm>
     5 # include <cmath>
     6 # define LL long long
     7 using namespace std ;
     8 
     9 int a[100010] ;
    10 int f[100010] ;
    11 //int dp[100010] ;
    12 int n ;
    13 
    14 int bsearch(int size, const int &a) {
    15     int l=0, r=size-1;
    16     while( l <= r ){
    17         int mid = (l+r)/2;
    18         if( a >= f[mid-1] && a < f[mid] ) return mid;// >&&<= 换为: >= && <
    19         else if( a < f[mid] ) r = mid-1;
    20         else l = mid+1;
    21     }
    22 }
    23 
    24 int LIS()
    25 {
    26     int i, j, size = 1;
    27     f[0] = a[0];
    28   //  dp[0] = 1;
    29     for( i=1; i < n; ++i )
    30     {
    31         if( a[i] < f[0] ) j = 0; // <= 换为: <
    32         else if( a[i] >= f[size-1] ) j = size++;// > 换为: >=
    33         else j = bsearch(size, a[i]);
    34         f[j] = a[i];
    35       //  dp[i] = j+1;
    36     }
    37     
    38     return size;
    39 }
    40 
    41 
    42 int main ()
    43 {
    44    // freopen("in.txt","r",stdin) ;
    45     int T ;
    46     scanf("%d" , &T) ;
    47     int Case = 1 ;
    48     while(T--)
    49     {
    50 
    51        printf("Case #%d:
    " , Case) ;
    52        Case++ ;
    53        scanf("%d" , &n) ;
    54        int i ;
    55        for (i = 0 ; i < n ;i++)
    56        {
    57            int x ;
    58            scanf("%d" , &x) ;
    59            a[i] = x-i   ;
    60        }
    61        
    62        printf("%d
    " , n-LIS()) ;
    63     }
    64 
    65 
    66     return 0 ;
    67 }
    View Code
  • 相关阅读:
    石油采集
    石油采集
    Redis 笔记与总结7 PHP + Redis 信息管理系统(用户信息的增删改查)
    数据分析电子商务B2C全流程_数据分析师
    数据分析电子商务B2C全流程_数据分析师
    数据挖掘中分类算法小结_数据分析师
    大数据分析或提升企业税务职能价值
    大数据可视化必须避免的三种常见错误
    大数据可视化必须避免的三种常见错误
    数据分析帮你预知商机
  • 原文地址:https://www.cnblogs.com/mengchunchen/p/4542659.html
Copyright © 2011-2022 走看看