题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4540
![](https://i-blog.csdnimg.cn/blog_migrate/cdec0645add3fc3c328197dda5c76203.gif)
1 #include<iostream> 2 const int inf=1<<30; 3 using namespace std; 4 int map[22][22]; 5 int dp[22][22];//表示前i个时刻在第j个位置时的最小消耗能量 6 int n,m; 7 8 int main(){ 9 while(~scanf("%d%d",&n,&m)){ 10 for(int i=1;i<=n;i++){ 11 for(int j=1;j<=m;j++){ 12 scanf("%d",&map[i][j]); 13 dp[i][j]=inf; 14 } 15 } 16 for(int i=1;i<=m;i++){ 17 dp[1][i]=0; 18 } 19 for(int i=2;i<=n;i++){ 20 for(int j=1;j<=m;j++){ 21 for(int k=1;k<=m;k++){ 22 dp[i][j]=min(dp[i][j],dp[i-1][k]+abs(map[i][j]-map[i-1][k])); 23 } 24 } 25 } 26 int ans=inf; 27 for(int i=1;i<=m;i++){ 28 ans=min(ans,dp[n][i]); 29 } 30 printf("%d\n",ans); 31 } 32 return 0; 33 }