华为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. 在dom4j中使用XPath

    package com.wzh.test.xpath; import java.io.File; import org.dom4j.Document; import org.dom4j.Documen ...

  2. addSubView需要注意的几个点

    addSubview: Adds a view to the end of the receiver’s list of subviews. 译:增加一个视图到接收者的子视图列表中. - (void) ...

  3. JAVA中抽象类的一些总结

    抽象类和普通类一样,有构造函数.抽象类中有一些属性,可以利用构造方法对属性进行初始化.子类对象实例化的时候先执行抽象类的构造,再执行子类构造. 抽象类不能用final声明.因为抽象类必须有子类继承,所 ...

  4. Ecshop 安装时错误

    网上提示方法将install/includes/lib_installer.php以下内容修改后仍然提示失败: include(ROOT_PATH . 'install/languages/' . $ ...

  5. 去掉 input type="number" 右边图标

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. nyoj 56-阶乘因式分解(一)

    点击打开链接 阶乘因式分解(一) 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 给定两个数m,n,其中m是一个素数. 将n(0<=n<=10000)的阶乘分 ...

  7. [POJ 2063] Investment (动态规划)

    题目链接:http://poj.org/problem?id=2063 题意:银行每年提供d种债券,每种债券需要付出p[i]块钱,然后一年的收入是v[i],到期后我们把本金+收入取出来作为下一年度本金 ...

  8. 常用自动化测试工具介绍(支持B/S、C/S)

    一.功能测试工具1.QTP测试工具 全名HP QuickTest Professional software ,最新的版本为HP QuickTest Professional 11.0 QTP是qui ...

  9. @Required @Autowired @Resource注解详解

    一.@Required注解用于检查特定的属性是否设置 1.RequiredAnnotationBeanPostProcessor 为该注解的处理器,即bean后置处理器,检查所有带有该解的bean属性 ...

  10. 扩大View的点击范围

    扩大View的点击范围本人知道的有两种方法,在不影响界面效果的前提下: 1.在View的外面添加一个透明容器 2.就是本文要说的,代码如下 : public void addToParentArea( ...