简单题。。。
dp[ i ][ j ] 表示第 i 行取第 j 个数的MinVal
/* DP&简单题 */ #include<stdio.h> #include<string.h> #include<stdlib.h> #include<algorithm> #include<iostream> #include<queue> #include<stack> #include<math.h> #include<map> using namespace std; const int inf = 0x7fffffff; int mat[ 22 ][ 12 ],dp[ 22 ][ 12 ]; int main(){ int n,k; while( scanf("%d%d",&n,&k)==2 ){ for( int i=0;i<n;i++ ){ for( int j=0;j<k;j++ ){ scanf("%d",&mat[i][j]); dp[i][j] = inf; } } for( int i=0;i<k;i++ ) dp[0][i] = 0; for( int i=1;i<n;i++ ){ for( int j=0;j<k;j++ ){ for( int j2=0;j2<k;j2++ ){ dp[ i ][ j ] = min( dp[ i ][ j ],dp[ i-1 ][ j2 ]+abs( mat[i][j]-mat[i-1][j2] ) ); } } } int ans = inf; for( int j=0;j<k;j++ ) ans = min( ans,dp[n-1][j] ); //printf("dp[%d][%d]=%d ",i,j,dp[i][j]); printf("%d ",ans); } return 0; }