题目链接:https://uva.onlinejudge.org/external/1/116.pdf

和矩形嵌套,巴比伦塔差不多。

题意:

给出矩阵,这个矩阵是环形的,就是说第一行的上一行是最后一行,最后一行的下一行是第一行,要求从最左边一列走到最右边一列,路径上的和最小。多组解输出字典序最小的解。

 

分析:

DAG多段图,dp(i,j)从第i行,第j列出发的最优解,然后走一遍每一行的第一列。

这里的字典序最小,每次决策时的三个选择,每一行,重新排个序,这样就保证了字典序最小。

 

姜来是老的辣,写了好久不知道WA在哪里,快写炸了。然后还是参考了下刘汝佳的写法,确实比我写的好一点,借鉴一下。

 

#include <bits/stdc++.h>

using namespace std;

#define INF 0x3f3f3f3f


int a[105][105];
int dp[105][105];
int path[105][105];

int main()
{
    //freopen("in.txt","r",stdin);
    int m,n;
    while(scanf("%d%d",&m,&n)!=EOF)
    {
        for(int i=0; i<m; i++)
        {
            for(int j=0; j<n; j++)
            {
                scanf("%d",&a[i][j]);
            }
        }

        memset(dp,INF,sizeof(dp));

        int ans = INF+1;
        for(int j=n-1; j>=0; j--)
        {
            for(int i=0; i<m; i++)
            {
                if(j==n-1) dp[i][j] = a[i][j];
                else
                {
                    int row[3] = {i,i-1,i+1};
                    if(i==0) row[1] = m-1;
                    if(i==m-1) row[2] = 0;
                    sort(row,row+3);

                    for(int k=0; k<3; k++)
                    {
                        int v = dp[row[k]][j+1] + a[i][j];
                        if(v<dp[i][j])
                        {
                            dp[i][j] = v;
                            path[i][j] = row[k];
                        }
                    }

                }


            }
        }

        int flag;
        for(int i=0;i<m;i++) {
            if(ans>dp[i][0])
            {
                ans = dp[i][0];
                flag = i;
            }
        }

        printf("%d",flag+1);
        for(int j=1;j<n;j++) {
            printf(" %d",path[flag][j]+1);
            flag = path[flag][j];
        }
        puts("");
        printf("%d\n",ans);



    }



    return 0;
}
View Code

相关文章:

  • 2021-08-02
  • 2022-12-23
  • 2022-12-23
  • 2021-08-15
  • 2022-12-23
  • 2022-03-06
  • 2021-07-07
  • 2021-11-10
猜你喜欢
  • 2021-12-02
  • 2021-08-22
  • 2022-02-16
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案