HDU4540+DP

简单题。。。

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\n",i,j,dp[i][j]);

		printf("%d\n",ans);

	}

	return 0;

}


 


你可能感兴趣的:(HDU)