http://oj.leetcode.com/problems/minimum-path-sum/
// The problem is straightforward, and the question is how to write it in an elegant way
class Solution {
public:
const int INF=100000000;
int GetNum(vector<vector<int>> &dp, int x, int y){
if(x<0||y<0||x>=dp.size()||y>=dp[0].size()) return INF;
else return dp[x][y];
}
int minPathSum(vector<vector<int> > &grid) {
vector<vector<int>> dp;
int row=grid.size(), col=grid[0].size();
for(int i=0;i<row;i++){
vector<int> oneRow;
for(int j=0;j<col;j++){
oneRow.push_back(INF);
}
dp.push_back(oneRow);
}
dp[0][0]=0;
for(int i=0;i<row;i++){
for(int j=0;j<col;j++){
dp[i][j]=min(dp[i][j],GetNum(dp,i-1,j));
dp[i][j]=min(dp[i][j],GetNum(dp,i,j-1));
dp[i][j]+=grid[i][j];
}
}
return dp[row-1][col-1];
}
};