给定M*N矩阵,从左上角到右下角,每次向下走一步或向右走一步,到右下角时,路上所取数字之和最小。
#include<iostream.h>
#include<string.h>

const int N = 8;
const int M = 9;


const int a[N][M] = ...{

...{9,3,0,8,9,10,5,8,9},

...{6,8,-5,10,0,-5,6,9,3},

...{8,6,1,8,5,4,0,2,-4},

...{9,9,-6,4,-6,7,4,3},

...{-1,7,1,8,2,7,2,10,7},

...{6,-3,-3,7,1,8,9,0},

...{0,7,0,2,-6,10,8,-8,5},

...{3,10,8,8,9,2,9,6,4},
};

int f[N][M];

void main()

...{
int i , j;
int tmp =0;
memset(f,0,sizeof(f));

for(i = 0 ; i < N ; ++i)

...{
tmp +=a[i][0];
f[i][0] = tmp;
}

tmp = 0;
for( j = 0 ; j < M ; ++j)

...{
tmp += a[0][j];
f[0][j] = tmp;
}

for( i = 1; i <N ; ++i)
for( j =1 ; j < M ; ++j)

...{
if(f[i][j-1] > f[i-1][j] )

...{
f[i][j] = f[i-1][j] + a[i][j];
}
else

...{
f[i][j] = f[i][j-1] + a[i][j];
}
}
cout<<f[N-1][M-1];
}


































































