BNUOJ49098 神奇的身高(LIS)

题目链接:

http://www.bnuoj.com/v3/problem_show.php?pid=49098

分析:

第i个人的身高肯定大于等于i,因此我们将不满足这个条件的人的肯定需要改变,人数为S1;

然后将满足这个条件的人的身高记录下来,然后这些人的身高也需要满足单调递增。

因此我们可以求出他们的LIS,长度为S2.

ans = S1 + n - S2;

代码如下:

#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;

const int maxn = 1e5+10;

int a[maxn];
int b[maxn];
int dp[maxn];

int main()
{
    int n;
    while(~scanf("%d",&n)){
        int num=0,ans=0,tot=0;
        for(int i=0;i<n;i++){
            scanf("%d",&a[i]);
            a[i]-=i;
            if(a[i]<1){
                ans++;
            }
            else{
                b[tot++]=a[i];
            }
        }
        int dnum=0;
        for(int i=0;i<tot;i++){
            int pos = upper_bound(dp,dp+dnum,b[i])-dp;
            if(pos==dnum) dp[dnum++]=b[i];
            else dp[pos]=b[i];
        }
        ans=ans+tot-dnum;

        printf("%d\n",ans);
    }
    return 0;
}
时间: 2024-10-15 00:40:38

BNUOJ49098 神奇的身高(LIS)的相关文章

BNU49098:神奇的身高

有一群小伙伴站成一行,每个人的身高都是非负整数,但是他们站在一起并不和谐.需要将他们的身高变成严格单调递增的正整数序列才是和谐的.现在你有一种神奇的魔法,可以任意改变一个人的身高.现在问题来了,你最少需要改变多少人的身高才能使整个队伍和谐.(改变后的身高必须为整数) Input 有多组测试数据,保证大数据不超过15组. 每组测试数据: 第1行:一个数n表示人数(1≤n≤100000) 第2~n+1行:每行1个数,对应数组的元素(0≤A[i]≤10^9) 以EOF结束 Output 输出最少需要修

POJ 1836 Alignment 最长递增子序列(LIS)的变形

大致题意:给出一队士兵的身高,一开始不是按身高排序的.要求最少的人出列,使原序列的士兵的身高先递增后递减. 求递增和递减不难想到递增子序列,要求最少的人出列,也就是原队列的人要最多. 1 2 3 4 5 4 3 2 1 这个序列从左至右看前半部分是递增,从右至左看前半部分也是递增.所以我们先把从左只右和从右至左的LIS分别求出来. 如果结果是这样的: A[i]={1.86 1.86 1.30621 2 1.4 1 1.97 2.2} //原队列 a[i]={1 1 1 2 2 1 3 4} b[

【转载】数学之美番外篇:平凡而又神奇的贝叶斯方法

数学之美番外篇:平凡而又神奇的贝叶斯方法 BY 刘未鹏 – SEPTEMBER 21, 2008POSTED IN: 数学, 机器学习与人工智能, 计算机科学 概率论只不过是把常识用数学公式表达了出来. ——拉普拉斯 记得读本科的时候,最喜欢到城里的计算机书店里面去闲逛,一逛就是好几个小时:有一次,在书店看到一本书,名叫贝叶斯方法.当时数学系的课程还没有学到概率统计.我心想,一个方法能够专门写出一本书来,肯定很牛逼.后来,我发现当初的那个朴素归纳推理成立了——这果然是个牛逼的方法. ——题记 目

poj1836——dp,最长上升子序列(lis)

poj1836——dp,最长上升子序列(lis) Alignment Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 13767   Accepted: 4450 Description In the army, a platoon is composed by n soldiers. During the morning inspection, the soldiers are aligned in a straight

【模板】LIS模板 洛谷P1091 [NOIP2004提高组]合唱队形 [2017年4月计划 动态规划11]

以题写模板. 写了两个:n^2版本与nlogn版本 P1091 合唱队形 题目描述 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK, 则他们的身高满足T1<...<Ti>Ti+1>…>TK(1<=i<=K). 你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形. 输入输出格

平凡而又神奇的贝叶斯方法

转自 http://mindhacks.cn/2008/09/21/the-magical-bayesian-method/ 数学之美番外篇:平凡而又神奇的贝叶斯方法 概率论只不过是把常识用数学公式表达了出来. --拉普拉斯 记得读本科的时候,最喜欢到城里的计算机书店里面去闲逛,一逛就是好几个小时:有一次,在书店看到一本书,名叫贝叶斯方法.当时数学系的课程还没有学到概率统计.我心想,一个方法能够专门写出一本书来,肯定很牛逼.后来,我发现当初的那个朴素归纳推理成立了--这果然是个牛逼的方法. --

平凡而又神奇的的贝叶斯方法

平凡而又神奇的贝叶斯方法 概率论只不过是把常识用数学公式表达了出来.    —拉普拉斯 目录 0. 前言  1. 历史      1.1 一个例子:自然语言的二义性      1.2 贝叶斯公式  2. 拼写纠正  3. 模型比较与贝叶斯奥卡姆剃刀      3.1 再访拼写纠正      3.2 模型比较理论(Model Comparasion)与贝叶斯奥卡姆剃刀(Bayesian Occam’s Razor)      3.3 最小描述长度原则      3.4 最优贝叶斯推理  4. 无处

POJ 1836-Alignment(DP/LIS变形)

Alignment Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 13465   Accepted: 4336 Description In the army, a platoon is composed by n soldiers. During the morning inspection, the soldiers are aligned in a straight line in front of the cap

java实现LIS算法,出操队形问题

假设有序列:2,1,3,5,求一个最长上升子序列就是2,3,5或者1,3,5,长度都为3. LIS算法的思想是: 设存在序列a. ① 如果只有一个元素,那么最长上升子序列的长度为1: ② 如果有两个元素,那么如果a[1]>a[0],则最长上升子序列的长度为2,a[1]为该最长上升子序列的最后一个元素;若a[1]<a[0],则最长上升子序列的长度为1,a[0]和a[1]均为  其最长上升子序列的最后一个元素. ③ 如果由三个元素,那么如果a[2]>a[0],a[2]>a[1],则a[