首页 > 其他分享 >UVA - 116 Unidirectional TSP 多段图的最短路

UVA - 116 Unidirectional TSP 多段图的最短路

时间:2023-04-07 11:08:11浏览次数:40  
标签:include int 一行 116 Unidirectional 多段 maxn col row


题目大意:给出一个矩阵,要求每列都要路过,起点必须是第一列,求经过的最短路径的上面的数字和最小

解题思路:公式为d[i][j] = min(d[i][j+1],d[i+1][j+1],d[i-1][j+1]) + a[i][j],本题要注意,因为可以从最上面一行到最后一行,或者从最后一行到第一行,注意i的变化

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn = 300 + 10;
int row,col;
int DP[maxn][maxn];
int m[maxn][maxn];
int ans[maxn][maxn];

int main() {
	while(scanf("%d%d",&row,&col) != EOF) {
		for(int i = 1; i <= row; i++)
			for(int j = 1; j <= col; j++) 
				scanf("%d", &m[i][j]);	

		memset(ans,0,sizeof(ans));
		int min_ = 0x3f3f3f3f;	
		int first;
		for(int i = col; i >= 1; i--)  {
			for(int j = 1; j <= row; j++) {
				if(i == col)	
					DP[j][i] = m[j][i];
				else{
					int mov[3] = {j,j-1,j+1};
					if(j == row)
						mov[2] = 1;
					if(j == 1)
						mov[1] = row;	
					sort(mov,mov+3);
					DP[j][i] = 0x3f3f3f3f;
					for(int k = 0; k < 3; k++) {
						int temp = DP[mov[k]][i+1] + m[j][i];
						if(temp < DP[j][i]) {
							DP[j][i] = temp;
							ans[j][i] = mov[k];
						}
					}
				}
				if(i == 1 && DP[j][i] < min_) {
					min_ = DP[j][i];
					first = j;
				}
			}
		}
		printf("%d",first);
		int i,j;
		for(i = ans[first][1],j = 2; j <= col;i = ans[i][j],j++)
			printf(" %d",i);
		printf("\n");
		printf("%d\n",min_);
	}
	return 0;
}




标签:include,int,一行,116,Unidirectional,多段,maxn,col,row
From: https://blog.51cto.com/u_10970600/6175564

相关文章

  • 多段程序
    dw(defineword)定义字型数据(每个数据用两个单元存放)dw定义的数据处于代码段的最开始,即偏移地址为0上db定义字数据(每个数据用一个单元存放)栈的使用将数据、代码、栈放入不同的段......
  • VC6 在win11下运行出现 LINK : fatal error LNK1168: cannot open Debug/test.exe for
    写在前面vc6下载地址:https://softdown01.rbread04.cn/down/VC6.0green.rar?timestamp=6429444b&auth_key=e4fc373a1342be9ce2d6802419980ade注意:如果是win11则记得修改msdev名字修改兼容性和管理员运行才行 问题:最近用vc6学习逆向的时候出现的,记录下,方便查阅:LINK:fatal......
  • DUTOJ 1165: A Hard Game
    问题1165--AHardGame1165:AHardGame时间限制:1Sec  内存限制:128MB提交:26  解决:10[提交][状态][讨论版][命题人:201685076CJC]题目描......
  • [oeasy]python0116_文字的起源_苏美尔文明_楔形文字_两河流域
    文字起源回忆上次内容上次回顾了西里尔字符的编码过程KOI-7KOI-8ISO-8859系列进行总结字符扩展ascii共16种由iso组织制定从iso-8859-1到iso-8859-16无法同时显示......
  • 数组模拟双向列表 洛谷 P1160 队列安排
    题目描述一个学校里老师要将班上N个同学排成一列,同学被编号为1~N,他采取如下的方法:1.先将1号同学安排进队列,这时队列中只有他一个人;2.2~N号同学依次入列,编号为i的同学入列方式......
  • CF1168C And Reachability 题解 线性dp
    题目链接https://codeforces.com/problemset/problem/1168/C题目大意给定一个数组\(a\),从下标\(x\)能够转移到下标\(y\)要满足\(x\lty\)且\(a_{p_i}\,\&\,a......
  • 116Cebtos7安装node
    在windows中本来安装了node,就自带npm但是在centos7中,安装了node没有npm这个命令于是就有了这个...首先安装nodeyuminstallepel-releaseyuminstallnodejs再安装......
  • Educational Codeforces Round 116 (Rated for Div. 2)
    题目链接A核心思路这个题目相当的玄学,所以如果遇到实在不会的题目。那么直接从样例入手吧,我们可以从样例发现每次改的都是开头或者最后的一个。于是大胆的猜测啊。会不......
  • P1163 银行贷款(小数二分)
    P1163银行贷款分析变量命名如下:\(n\)表示贷款的原值,\(m\)表示每月支付的分期付款金额,\(k\)表示分期付款还清贷款所需的总月数。\(p\)表示贷款的月利率第......
  • UVA11613 Acme Corporation
    UVA11613AcmeCorporation题意翻译已经很清楚了。思路看到这种求限制下的最值的问题,而且数据范围还比较小,我们不难想到费用流。但是这道题要求的是最大利润,那么我们可......