华为OJ试题整理
1.合唱队
分析:
涉及到最长上升子序列和最长下降子序列的问题。
首先设以第i个人为中间的Ti,则求出从前往后到第i个人的最长上升子序列,然后求出从第i个人到最后一个人的最长下降子序列。得到的总长度为最长的合唱队长队。
最长上升自序列的算法:
对于原始数组org[];new一个新的数组result[],用来存储原始数组里每一个元素的最长上升子序列的长度。对于i每一个元素来说,自己一定是自己的子集,所以初始化为1.首先对任意一个元素org[i]而言,在org[0]~org[i]中寻找最长的上升子序列。如果在这段数据中,org[j]的最长上升子序列的长度为result[j],org[i]的最长公共子序列一定包括org[j]的{最长上升子序列,org[i]},所以长度为org[j]+1.
最长下降子序列的思路与上面相似。
package com.whu.wsy;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated