美団出前2017お年玉問題コメント

1714 ワード

試験を準備して過去の問題を復習する時CSDNの上で多くこの問題についての転載と評論があることを見て、その中の大多数のJAVAの解法が同じ方法を採用したことを発見します.この方法は基本的に問題の要求に達しているが,依然として100%通過率を満たすことができない.
一つの机の上にいくつかの数値の等しくないお年玉を置いて、1つの輪に囲まれて、今あなたにいくつかのお年玉を選んで、隣接する2つのお年玉を同時に選択することができなくて、プログラミングしてお年玉を選んで得た金額の最大値を求めます;
入力:
2
1,2,3
1,2,3,4
出力:
3
6
題意を理解すると、これは強盗問題の環状版であることがわかります(参考住所:https://leetcode.com/problems/house-robber-ii/)
キュー版との違いは末尾の処理にあるので、0位から計算するのと1位から計算するのとの違いを別々に検討すればいいです.以下はコードです(書くのが遅いので、議論部分を関数的に最適化することができます):
package code_test;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class HongBao {

	//    
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = Integer.valueOf(in.nextLine());
        //list      
        List list = new ArrayList();
        for(int i = 0; i < n; i++){
            String[] temp = in.nextLine().split(",");
            int[] arr = new int[temp.length];
            for(int j = 0; j < temp.length; j++){
                arr[j] = Integer.valueOf(temp[j]);
            }
            list.add(arr);
        }
        for(int[] l:list){
        	//     1 
        	if(l.length==1)
        	{
        		System.out.println(l[0]);
        	}else{
        		//    
        		int include = 0;
            	int exclude = 0;
            	for(int i=0;i
テスト入力が1100,2,3110,4,5111の場合、単純版の答えとは異なり、単純版は218で、正しいのは321であるべきである.