【編程題】消消樂(vivo筆試)

【編程題】消消樂(vivo筆試)2019.9.11

題目描述

輸入 1 4 2 2 3 3 2 4 1,返回21(先消3 3,得分爲2 * 2=4;再消2 2 2,得分爲3 * 3 =9;再消4 4,得分2 * 2=4;再消1 1,得分2 * 2=4;所以得分爲4+9+4+4=21)

題目代碼

package vivo;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main2 {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String inputStr = br.readLine();
        int input[] = parseInts(inputStr.split(" "));
        int output = solution(input);
        System.out.println(output);
    }
    private static int[] parseInts(String[] strArr) {
        if (strArr == null || strArr.length == 0) {
            return new int[0];
        }
        int[] intArr = new int[strArr.length];
        for (int i = 0; i < intArr.length; i++) {
            intArr[i] = Integer.parseInt(strArr[i]);
        }
        return intArr;
    }
    private static int solution(int[] input) {
        int n=input.length;
        int[][][] path=new int[n][n][n];
        return move(input,0,n-1,0,path);
    }
    private static int move(int[] input,int i,int j,int k,int[][][] path){
        if(i>j)
            return 0;
        if(path[i][j][k]>0)
            return path[i][j][k];
        for(;i<=j-1&&input[i+1]==input[i];i++,k++);
        int tem=(k+1)*(k+1)+move(input,i+1,j,0,path);
        for(int m=i+1;m<=j;m++){
            if(input[i]==input[m]){
                tem=Math.max(tem,move(input,i+1,m-1,0,path)+move(input,m,j,k+1,path));
            }
        }
        path[i][j][k]=tem;
        return tem;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章