AOJ0089 The Shortest Path on A Rhombic Path

問題リンク The Shortest Path on A Rhombic Path

  • 解法

DPです。その地点に到達するときの最大値を格納します。
数字の配置がひし形で変則的なので、ひし形の半分で区切ってDPを埋めるといいと思います。

  • ソース
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

//The Shortest Path on A Rhombic Path
public class AOJ0089 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		List<String> l = new ArrayList<String>();
		while(sc.hasNext())l.add(sc.next());
		int n = l.size();
		int[][] a = new int[n][];
		for(int i=0;i<n;i++){
			String[] s = l.get(i).split(",");
			int k = s.length;
			a[i] = new int[k];
			for(int j=0;j<k;j++)a[i][j]=Integer.parseInt(s[j]);
		}
		int[] dp = {a[0][0]};
		for(int i=1;i<n;i++){
			int[] tmp = new int[a[i].length];
			for(int j=0;j<tmp.length;j++){
				if(i<=n/2){
					if(j==0)tmp[j]=dp[j]+a[i][j];
					else if(j==tmp.length-1)tmp[j]=dp[j-1]+a[i][j];
					else tmp[j]=Math.max(dp[j-1]+a[i][j], dp[j]+a[i][j]);
				}
				else{
					tmp[j] = Math.max(dp[j]+a[i][j], dp[j+1]+a[i][j]);
				}
			}
			dp = tmp;
		}
		System.out.println(dp[0]);
	}
}