hdu4540---DP入门

状态转移方程    dp[k][i]=dp[k-1][j]+abs(a[k][i]-a[k-1][j]);

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
const int maxn=101;
int dp[maxn][maxn],a[maxn][maxn];
int n,m,ans;
int main(){
    while(cin>>n>>m){
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                cin>>a[i][j];
            }
        }
        memset(dp,0x3f3f3f3f,sizeof(dp));
        for(int i=1;i<=m;i++)dp[1][i]=0;
        for(int k=2;k<=n;k++){
            for(int i=1;i<=m;i++){
                for(int j=1;j<=m;j++){
                    if(dp[k][i]>dp[k-1][j]+abs(a[k][i]-a[k-1][j]))
                        dp[k][i]=dp[k-1][j]+abs(a[k][i]-a[k-1][j]);
                }
            }
        }
        ans=0x3f3f3f3f;
        for(int i=1;i<=m;i++){
            ans=min(ans,dp[n][i]);
        }
        cout<<ans<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/holly_Z_P_F/article/details/81254562