package com.interview.algorithms.dp;
/**
* Created_By: zouzhile
* Date: 4/1/14
* Time: 3:37 PM
*
* A table composed of N x M cells, each having a certain quantity of apples, is given.
* You start from the upper-left corner. At each step you can go down or right one cell.
* Find the maximum number of apples you can collect.
*
* optimal[i][j]=table[i][j] + max(optimal[i-1][j], if i>0 ; optimal[i][j-1], if j>0)
*/
public class C12_8_AppleCollection {
public int maxNumberOfApples(int[][] table) {
int[][] optimal = new int[table.length][table[0].length];
// init state
optimal[0][0] = table[0][0];
for(int i = 0; i < table.length; i ++)
for(int j = 0; j < table[0].length; j ++ ) {
if(i == 0 && j == 0)
optimal[i][j] = table[i][j];
else if (i == 0 && j > 0) {
optimal[i][j] = optimal[i][j-1] + table[i][j];
} else if (i > 0 && j == 0) {
optimal[i][j] = optimal[i-1][j] + table[i][j];
} else {
if(optimal[i-1][j] > optimal[i][j-1])
optimal[i][j] = optimal[i-1][j] + table[i][j];
else
optimal[i][j] = optimal[i][j-1] + table[i][j];
}
}
return optimal[table.length - 1][table[0].length - 1];
}
}