首页 > 代码库 > 11.7 马戏团叠罗汉

11.7 马戏团叠罗汉

思路:定义好Person的数据结构,按照身高和体重排好序。

solutions[i]代表以person[i]结尾的能够叠起的最多人的解。 

solutions[0]初始化,然后求从1~n的情况。

import java.util.ArrayList;import java.util.Collections;public class Solution {    public ArrayList<Person> getIncreasingSequence(ArrayList<Person> people) {        Collections.sort(people);        ArrayList<ArrayList<Person>> solutions = new ArrayList<ArrayList<Person>>();        ArrayList<Person> first = new ArrayList<Person>();        first.add(people.get(0));        solutions.add(first);        for (int i = 1; i < people.size(); i++) {            Person cur = people.get(i);            int len = 0;            int longestPre = -1;            for (int j = 0; j < i; j++) {                ArrayList<Person> pre = solutions.get(j);                if (cur.isBigger(people.get(j))) {                    if (solutions.get(j).size() > len) {                        len = pre.size();                        longestPre = j;                    }                }            }            ArrayList<Person> curSolu = new ArrayList<Person>();            if (longestPre != -1)                curSolu.addAll(solutions.get(longestPre));            curSolu.add(cur);            solutions.add(curSolu);        }        int longestLen = 1;        int longestIdx = -1;        for (int i = 0; i < people.size(); i++) {            if (solutions.get(i).size() > longestLen) {                longestLen = solutions.get(i).size();                longestIdx = i;            }        }        return solutions.get(longestIdx);    }    public static void main(String[] args) {        ArrayList<Person> persons = initialize();        System.out.println(new Solution().getIncreasingSequence(persons));    }    public static ArrayList<Person> initialize() {        ArrayList<Person> items = new ArrayList<Person>();        Person item = new Person(65, 60);        items.add(item);        item = new Person(70, 150);        items.add(item);        item = new Person(56, 90);        items.add(item);        item = new Person(75, 190);        items.add(item);        item = new Person(60, 95);        items.add(item);        item = new Person(68, 110);        items.add(item);        item = new Person(35, 65);        items.add(item);        item = new Person(40, 60);        items.add(item);        item = new Person(45, 63);        items.add(item);        return items;    }}class Person implements Comparable<Person> {    int w;    int h;    public Person(int w, int h) {        this.w = w;        this.h = h;    }    public int compareTo(Person p) {        if (h != p.h)            return ((Integer) h).compareTo(p.h);        else            return ((Integer) w).compareTo(p.w);    }    public String toString() {        return "(" + w + "," + h + ")";    }    public boolean isBigger(Person b) {        if (this.w > b.w && this.h > b.h)            return true;        else            return false;    }}

 

11.7 马戏团叠罗汉