UVa Problem 116 Unidirectional TSP (단 방향 여행사 문제)
// Unidirectional TSP ( )
// PC/UVa IDs: 111104/116, Popularity: A, Success rate: low Level: 3
// Verdict: Accepted
// Submission Date: 2011-10-12
// UVa Run Time: 0.252s
//
// (C)2011, 。metaphysis # yeah dot net
//
// [ PDF ]
// http://uva.onlinejudge.org/external/1/116.pdf
//
// [ ]
// 、 、 , ,
// , ( ):
//
// matrix[i][j] += min{matrix[i][j - 1],matrix[i - 1][j - 1],matrix[i + 1][j - 1]}
//
// DP, , ,
// , 。 : ,
// DP, , , :
//
// 3 4 1 2 8 6
// 1 2 8 2 1 1
// 5 9 3 9 9 5
// 1 1 1 3 1 1
// 3 7 2 8 6 4
//
// , , 2 - 2 - 1 -
// 1 - 2 - 2, DP, ,
// 。 , 30 , 100 ,
// long long 。
#include <iostream>
using namespace std;
#define MAXLINE 11
#define MAXROW 101
#define MAXINT (1 << 30 - 1)
int main(int ac, char *av[])
{
int line, row, tag, tmp;
int successor[MAXLINE][MAXROW];
long long matrix[MAXLINE][MAXROW];
long long min;
while (cin >> line >> row)
{
for (int i = 1; i <= line; i++)
for (int j = 1; j <= row; j++)
cin >> matrix[i][j];
// , , ,
// , , 。
for (int j = row - 1; j >= 1; j--)
{
for (int i = 1; i <= line; i++)
{
min = MAXINT;
tmp = (i == 1 ? line : i - 1);
if (min > matrix[tmp][j + 1])
{
min = matrix[tmp][j + 1];
tag = tmp;
}
else if (min == matrix[tmp][j + 1] && tag > tmp)
tag = tmp;
if (min > matrix[i][j + 1])
{
min = matrix[i][j + 1];
tag = i;
}
else if (min == matrix[i][j + 1] && tag > i)
tag = i;
tmp = (i == line ? 1 : i + 1);
if (min > matrix[tmp][j + 1])
{
min = matrix[tmp][j + 1];
tag = tmp;
}
else if (min == matrix[tmp][j + 1] && tag > tmp)
tag = tmp;
matrix[i][j] += min;
successor[i][j] = tag;
}
}
// 。
min = MAXINT;
for (int i = 1; i <= line; i++)
if (matrix[i][1] < min)
{
min = matrix[i][1];
tag = i;
}
// 。
cout << tag;
int next = 1;
int tmp = tag;
while (next < row)
{
cout << " " << successor[tmp][next];
tmp = successor[tmp][next];
next++;
}
cout << endl;
cout << matrix[tag][1] << endl;
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Docker를 사용한 React 및 .NET Core 6.0 샘플 프로젝트 - 1부이 기사에서는 Entity Framework Core Code First 접근 방식을 사용하는 ASP.NET Core 6.0 WEP API의 CRUD(만들기, 읽기, 업데이트 및 삭제) 작업에 대해 설명합니다. 웹 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.