华为OJ-初级题-合唱队

思路与分析

  本题可以用DP的方法,分别从正向和逆向的两个方向求,该数组即186 186 150 200 160 130 197 200的上升对大序列。正向为[1, 1, 1, 2, 2, 1, 3, 4],逆向为[3, 3, 2, 3, 2, 1, 1, 1]。

然后将两个序列相加取最大值为5,根据题意出列的人数为N -(5 - 1)。注:减去1的原因是为中间的数被正序和逆序加了两次。

  第一次做这种题表示很蒙蔽<`_`>~那么下面是源码。

本题参考代码

 import java.util.Arrays;
import java.util.Scanner;
/**
* 合唱队
* array[]:待处理数据
* Inc[]:正向遍历得到上升的最大序列
* Dec[]:逆向遍历得到上升的最大序列
*
* Created by Evan on 2016-8-29.
*/
public class ChorusDp { public static void main(String []args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
int N = sc.nextInt();
int [] array = new int [N];
int [] Inc = new int [N];
int [] Dec = new int [N];
for( int i = 0; i < N;i++){
array[i] = sc.nextInt();
}
//正向遍历得到上升的最大序列的个数是多少,本题为[1, 1, 1, 2, 2, 1, 3, 4] Inc[0] = 1;
for( int i = 1; i < N ; i++){
Inc[i] = 1;
for( int j = 0 ; j < i;j++){
if(array[i] > array[j] && Inc[j] + 1 > Inc[i]){
Inc[i] = Inc[j] + 1;
}
}
}
//System.out.println(Arrays.toString(Inc));
//逆向最长上升序列的个数,本题为[3, 3, 2, 3, 2, 1, 1, 1]
Dec[N - 1] = 1;
for(int i = N - 2; i >=0; i--){
Dec[i] = 1;
for(int j = N - 1; j > i; j--){
if(array[i] > array[j] && Dec[j] + 1 > Dec[i]){
Dec[i] = Dec[j] + 1;
}
}
}
//System.out.println(Arrays.toString(Dec));
int temp = Inc[0] + Dec[0];
for(int i = 1; i < N ;i++){
if(Inc[i] + Dec[i] > temp){
temp = Inc[i] + Dec[i];
}
}
System.out.println(N - temp + 1);//减去1是因为中间的那个数加了两次。
}
} }

合唱队

华为OJ-合唱队的更多相关文章

  1. 华为OJ:火车进站

    火车进站 给定一个正整数N代表火车数量,0<N<10,接下来输入火车入站的序列,一共N辆火车,每辆火车以数字1-9编号.要求以字典序排序输出火车出站的序列号. 输入描述: 有多组测试用例, ...

  2. 在华为oj的两个月

    一次偶然的机会,我接触到华为oj平台(http://career-oj.huawei.com/exam/camLogin.jsp),当时的心情很是兴奋,于是立马注册开通,然后迫不及待地上去做题.刚开始 ...

  3. 合唱队(华为OJ)

    描述 计算最少出列多少位同学,使得剩下的同学排成合唱队形 说明: N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左 ...

  4. 华为oj 刷题记录之合唱团

    华为OJ-合唱队 描述 计算最少出列多少位同学,使得剩下的同学排成合唱队形 说明: N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队 ...

  5. 华为OJ题目:刷题

    题目描述: 新入职华为的小伙伴们都有在oj上面刷题的任务,共需要刷100道初级题,45道中级题,5道高级题,其中,做出来的高级题如果超标可以当初级或者中级题,做出来的中级题如果超标可以当初级题.每天, ...

  6. 华为OJ平台——字符串分隔

    题目描述: 连续输入字符串,请按长度为8拆分每个字符创 后输出到新的字符串数组: 长度不是8整数倍的字符串请在后面补数字0,空字符串不处理 输入 连续输入字符串(输入两次,每个字符长长度小于100)输 ...

  7. 华为OJ平台——输出最小的k个数

    输入n个整数,输出其中最小的k个. 详细描述: 接口说明 原型: bool GetMinK(unsignedint uiInputNum, int *pInputArray, unsignedint ...

  8. 华为OJ平台——矩阵乘法

    题目描述: 如果A是个x行y列的矩阵,B是个y行z列的矩阵,把A和B相乘,其结果将是另一个x行z列的矩阵C. 输入: 1.第一个矩阵的行数 2.第一个矩阵的列数(也是第二个矩阵的行数) 3.第二个矩阵 ...

  9. 华为OJ机试训练(一)

    题目1 -- 通过输入英文句子.将每一个单词反过来,标点符号顺序不变.非26个字母且非标点符号的情况就可以标识单词结束. 标点符号包含,.!? 比如输入:Hello, I need an apple. ...

  10. 矩阵乘法的运算量计算(华为OJ)

    题目地址: https://www.nowcoder.com/practice/15e41630514445719a942e004edc0a5b?tpId=37&&tqId=21293 ...

随机推荐

  1. java中json包的使用以及字符串,map,list,自定义对象之间的相互转换

    做一个map和字符串的转换,需要导入这些jar包,这是最基本的一些jar包. 经过多方尝试得出结论入下: 首先导入基本包:json-lib-2.2.3-jdk15.jar 如果没有这个jar包,程序是 ...

  2. Eclipse CDT 代码高亮配置

    效果图如下: 配置生效方式: 找到CDT的workspace目录中如下文件 X:\workspace\.metadata\.plugins\org.eclipse.core.runtime\.sett ...

  3. [SQL]select scope_identity()传回插入相同范围之识别资料行中的最后一个识别值

    传回插入相同范围之识别资料行中的最后一个识别值.范围是一个模组:预存程序.触发程序.函数或批次.因此,如果两个陈述式在相同预存程序.函数或批次中,它们就在相同范围中. 语法: SCOPE_IDENTI ...

  4. HDU 5877 [dfs序][线段树][序]

    /* 题意: n个点的树,每个点给定一个权值,给定一个k,求任意一点的子树中,权值小于k/该点权值的点共有多少个. 思路: 1.很明显的子树的操作,应用dfs序. 2.比赛的时候傻逼了,一直在调划分树 ...

  5. C++primer练习14.44

    编写一个简单的桌面计算器使其处理二元运算 // 14_44.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iost ...

  6. python正则表达式介绍

    点击打开链接 1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的 ...

  7. (转)Java DES 与Base64

    原文地址http://blog.csdn.net/tomatozq/article/details/20773559 1,DES /** * 解密 * @param message * @param ...

  8. Android——进度条ProgressBar

    1.activity_progressbar.xml <?xml version="1.0" encoding="utf-8"?><Linea ...

  9. Loggly:提高ElasticSearch性能的九个高级配置技巧

    Loggly日志管理服务在其很多核心功能里使用ElasticSearch作为搜索引擎.Jon Gifford在其文章“ElasticSearch vs Solr”中指出,日志管理领域对搜索技术有了更高 ...

  10. Android开发-API指南-Content Provider

    Content Providers 英文原文:http://developer.android.com/guide/topics/providers/content-providers.html 采集 ...