numbertriangles - codetrick
http://mangogao.com/read/90.html
http://jackneus.com/programming-archives/number-triangles/
Read full article from numbertriangles - codetrick
Consider the number triangle shown below. Write a program that calculates the highest sum of numbers that can be passed on a route that starts at the top and ends somewhere on the base. Each step can go either diagonally down to the left or diagonally down to the right.
7 3 8 8 1 0 2 7 4 4 4 5 2 6 5
In the sample above, the route from 7 to 3 to 8 to 7 to 5 produces the highest sum: 30.
PROGRAM NAME: numtri
INPUT FORMAT
The first line contains R (1 <= R <= 1000), the number of rows. Each subsequent line contains the integers for that particular row of the triangle. All the supplied integers are non-negative and no larger than 100.SAMPLE INPUT (file numtri.in)
5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5
OUTPUT FORMAT
A single line containing the largest sum using the traversal specified.SAMPLE OUTPUT (file numtri.out)
30
https://github.com/leonlu/USACOJavaSolution/blob/master/USACOSection1/src/numtri.java
DP题。newRow[j]+= max(oldRow[j-1], oldRow[j])。从上至下。边读边计算,状态只需保存当前行和上一行。每一行首尾补零,为了方便计算。
public static void main(String[] args) throws IOException { BufferedReader in = new BufferedReader(new FileReader("numtri.in")); | |
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter( | |
"numtri.out")),true); | |
int[] oldRow = null; | |
int[] newRow = null; | |
// initialize | |
int N = Integer.parseInt(in.readLine()); | |
for(int i = 1; i <= N; i++){ | |
// exchange oldRow with newRow | |
if(i != 1) oldRow = newRow; | |
// read in newRow | |
newRow = new int[N+2]; | |
newRow[0] = 0; | |
newRow[N+1] = 0; | |
StringTokenizer st = new StringTokenizer(in.readLine()); | |
for(int j = 1; j <= i; j++) | |
newRow[j] = Integer.parseInt(st.nextToken()); | |
// calculate | |
if(i != 1) | |
for(int j = 1; j <=i; j++) | |
newRow[j]+= max(oldRow[j-1], oldRow[j]); | |
} | |
// output | |
int maxValue = 0; | |
for(int i = 0; i < newRow.length; i++) | |
maxValue = max(newRow[i],maxValue); | |
out.println(maxValue); | |
System.exit(0); | |
} |
http://mangogao.com/read/90.html
http://jackneus.com/programming-archives/number-triangles/
Read full article from numbertriangles - codetrick