动态规划(Unidirectional TSP,uva 116)

来源:互联网 发布:mac相簿和照片的区别 编辑:程序博客网 时间:2024/04/30 20:02

dp里面sort用的好棒,我本来讨论了老半天的。。。


#include<bits/stdc++.h>using namespace std;const int INF=1<<30;int n,m;int MAP[11][110];int dp[11][110];int NEXT[11][110];int main(){    while(scanf("%d %d",&n,&m)!=EOF)    {        for(int i=1;i<=n;i++)            for(int j=1;j<=m;j++)                scanf("%d",&MAP[i][j]);        for(int i=1;i<=n;i++)        {            dp[i][m]=MAP[i][m];            NEXT[i][m]=0;        }        for(int j=m-1;j>=1;j--)            for(int i=1;i<=n;i++)            {                int temp[3]={i-1,i,i+1};                if(i==1) temp[0]=n;                if(i==n) temp[2]=1;                sort(temp,temp+3);                dp[i][j]=INF;                for(int k=0;k<3;k++)                    if(dp[temp[k]][j+1]+MAP[i][j]<dp[i][j])                    {                        dp[i][j]=dp[temp[k]][j+1]+MAP[i][j];                        NEXT[i][j]=temp[k];                    }            }        int ANS=INF;        for(int i=1;i<=n;i++)            ANS=min(ANS,dp[i][1]);        for(int i=1;i<=n;i++)            if(ANS==dp[i][1])            {                printf("%d",i);                i=NEXT[i][1];                int cnt=2;                while(i)                {                    printf(" %d",i);                    i=NEXT[i][cnt];                    cnt++;                }                printf("\n%d\n",ANS);                break;            }    }    return 0;}


0 0
原创粉丝点击