理解错题目的动态规划
金币
http://www.nowcoder.com/questionTerminal/d02004431fc0461b9fc0b17dc92ae222
emmmm,一开始以为最多应该是34,还问了考官半天,他让我再好好想想,考完发现左上的概念是什么。题目中给的案例应该斜着写就好了,总之很easy的动态规划,当前位置的总金币数等于 当前位置的金币数 + 左上或右上最多的总金币数
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main{
static ArrayList<integer> list = new ArrayList<integer>();</integer></integer>
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt();
int[][] data = new int[N][N];
for(int i = 0;i < N;i++) {
for(int j = 0; j <= i;j++) {
data[i][j] = scanner.nextInt();
}
}
int[][] dp = new int[N][N+1];
dp[0][0] = data[0][0];
for(int i = 1; i <N;i++) {
for(int j = 0; j <=i;j++) {
if(j == 0) dp[i][j] = dp[i-1][j]+ data[i][j] ;
else
dp[i][j] = Math.max(dp[i-1][j], dp[i-1][j-1])+ data[i][j] ;
}
}
int max = dp[N-1][0];
for(int i = 0; i < N+1; i++) {
if(dp[N-1][i] > max)
max = dp[N-1][i];
}
System.out.print(max);
}}