动态规划
/* */ #include<stdio.h> #include<malloc.h> #include<string.h> #include<stdlib.h> #include<math.h> #include<string.h> #include<iostream> int getMin(int a,int b){ if(a<b){ return a; } return b; } int minPathSum(int** grid, int gridSize, int* gridColSize){ if(gridSize==0||*gridColSize==0) return 0; int dp[gridSize][*gridColSize]; int i,j; dp[0][0]=grid[0][0]; for(i=1;i<gridSize;i++){ dp[i][0]=dp[i-1][0]+grid[i][0]; } for(j=1;j<*gridColSize;j++){ dp[0][j]=dp[0][j-1]+grid[0][j]; } for(i=1;i<gridSize;i++){ for(j=1;j<*gridColSize;j++){ dp[i][j]=getMin(dp[i-1][j],dp[i][j-1])+grid[i][j]; } } //printf("i=%d,j=%d ",i,j); return dp[i-1][j-1]; } int main() { int** grid,g[3][3]={{1,3,1},{1,5,1},{4,2,1}},gridSize=3,*gridColSize,i; grid=(int**)malloc(sizeof(int*)*3); for(i=0;i<gridSize;i++){ grid[i]=g[i]; } gridColSize=(int*)malloc(sizeof(int)); *gridColSize=3; int rs=minPathSum(grid,gridSize,gridColSize); printf("%d ",rs); return 0; }