5 1 4 6 8 10 2 5 7 15 17 6 8 9 18 20 10 11 12 19 21 20 23 25 29 33
109
分析:spa
假設a[i][j]表示從左上角走到a[i][j]的最小代價。那麼有以下的遞推式:設計
a[i][j]=min( a[i][j-1], a[i-1][j] )+a[i][j],其中i,j大於0.code
當i==j==0時,a[i][j]就是題目輸入的a[0][0].blog
當i==0&&j!=0時,a[i][j]=a[i][j-1]+a[i][j]遞歸
當i!=0&&j==0時,a[i][j]=a[i-1][j]+a[i][j].內存
因此代碼以下:string
1 #include<string.h> 2 #include<stdio.h> 3 4 int n; 5 int matrix[100][100]; 6 int value[100][100]; 7 8 int main() 9 { 10 scanf("%d", &n); 11 for (int i = 0; i < n; i++) 12 { 13 for (int j = 0; j < n; j++) 14 { 15 int temp; 16 scanf("%d", &temp); 17 matrix[i][j] = temp; 18 } 19 } 20 21 for (int i = 0; i < n; i++) 22 { 23 for (int j = 0; j < n; j++) 24 { 25 if ((i == 0) && (j == 0)) 26 { 27 value[i][j] = matrix[i][j]; 28 } 29 else if ((i == 0) && (j != 0)) 30 { 31 value[i][j] = matrix[i][j] + value[i][j - 1]; 32 } 33 else if ((i != 0) && (j == 0)) 34 { 35 value[i][j] = matrix[i][j] + value[i - 1][j]; 36 } 37 else 38 { 39 int a = matrix[i][j] + value[i - 1][j]; 40 int b = matrix[i][j] + value[i][j - 1]; 41 value[i][j] = (a > b) ? b : a; 42 } 43 44 } 45 } 46 printf("%d", value[n - 1][n - 1]); 47 return 0; 48 }