hdu5402 Travelling Salesman Problem
and m columns.
There is a non-negative number in each cell. Teacher Mai wants to walk from the top left corner (1,1) to
the bottom right corner (n,m).
He can choose one direction and walk to this adjacent cell. However, he can't go out of the maze, and he can't visit a cell more than once.
Teacher Mai wants to maximize the sum of numbers in his path. And you need to print this path.
For each test case, the first line contains two numbers n,m(1≤n,m≤100,n∗m≥2).
In following n lines,
each line contains m numbers.
The j-th
number in the i-th
line means the number in the cell (i,j).
Every number in the cell is not more than 104.
In the next line you should print a string consisting of "L","R","U" and "D", which represents the path you find. If you are in the cell (x,y),
"L" means you walk to cell (x,y−1),
"R" means you walk to cell (x,y+1),
"U" means you walk to cell (x−1,y),
"D" means you walk to cell (x+1,y).
2 3 3
3 3 3
3 3 2
RRDLLDRR
第一想法是搜多,但看到100*100的大小,感觉不是搜索题,后来发现是模拟题。如果n或m有一个是奇数,那么一定可以把所有的点都走一遍,这样结果一定是最大的,所以只要考虑都是偶数的情况。我的思路是先把横纵坐标只和为奇数的染成黑色,偶数的染成白色,那么画图可以知道
如果选择一个黑色方格不走,那么其他点都能够走一遍,但如果选择一个白色方格不走,必须要不走另外两个黑色方格才能走到终点,所以 一定是选择最小的黑色方格数不走。
然后选出最小的黑色方格,然后模拟一下走法就行了。
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<string>
#include<algorithm>
using namespace std;
#define inf 99999999
int gra[106][106],n,m,sum;
void jishulu()
{
int i,j;
printf("%d\n",sum);
if(n%2==1){
for(i=1;i<=n;i++){
for(j=1;j<=m-1;j++){
printf("%c",i%2==1?'R':'L');
}
if(i<n)printf("D");
else printf("\n");
}
}
else{
for(j=1;j<=m;j++){
for(i=1;i<=n-1;i++){
printf("%c",j%2==1?'D':'U');
}
if(j<m)printf("R");
else printf("\n");
}
}
}
void oushulu()
{
int i,j,minx=inf,dx=0,dy=0,x,y;
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
if((i+j)%2==1 && minx>gra[i][j]){
dx=i;dy=j;minx=gra[i][j];
}
}
}
printf("%d\n",sum-minx);
if(dx==n){
for(i=1;i<=n-2;i++){
for(j=1;j<=m-1;j++){
printf("%c",i%2==1?'R':'L');
}
printf("D");
}
if(dy==1){
x=n-1;y=1;
while(1)
{
printf("RD");x++;y++;
if(x==n && y==m){
printf("\n");break;
}
printf("RU");x--;y++;
}
}
else{
printf("D");
x=n;y=1;
while(1)
{
printf("RU");
x--;y++;
if(x+1==dx && y+1==dy){
printf("RRD");x++;y+=2;
}
else{
printf("RD");x++;y++;
}
if(x==n && y==m){
printf("\n");break;
}
}
}
}
else if(dx!=n){
for(i=1;i<=dx-1;i++){
for(j=1;j<=m-1;j++){
printf("%c",i%2==1?'R':'L');
}
printf("D");
}
if(dx%2==1){
printf("D");
x=dx+1;y=1;
if(dy==m){
while(1)
{
if((y+1)!=m){
printf("RURD");y+=2;
}
else{
printf("R");y++;
if(x!=n)printf("D");break;
}
}
}
else{
while(1)
{
if(x-1==dx && y+1==dy){
printf("RRURD");y+=3;
}
else{
printf("RURD");y+=2;
}
if(y==m){
if(x!=n)printf("D");
break;
}
}
}
for(i=dx+2;i<=n;i++){
for(j=1;j<=m-1;j++){
printf("%c",i%2==1?'L':'R');
}
if(i!=n)printf("D");
}
printf("\n");
}
else if(dx%2==0){
printf("D");
x=dx+1;y=m;
if(dy==1){
while(1)
{
if((y-1)!=1){
printf("LULD");y-=2;
}
else{
printf("L");y--;
if(x!=n)printf("D");
break;
}
}
}
else{
while(1)
{
if(x-1==dx && y-1==dy){
printf("LLULD");y-=3;
}
else{
printf("LULD");y-=2;
}
if(y==1){
if(x!=n)printf("D");
break;
}
}
}
if(x!=n){
for(i=dx+2;i<=n;i++){
for(j=1;j<=m-1;j++){
printf("%c",i%2==1?'L':'R');
}
if(i!=n)
printf("D");
}
}
printf("\n");
}
}
}
int main()
{
int i,j;
while(scanf("%d%d",&n,&m)!=EOF)
{
sum=0;
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
scanf("%d",&gra[i][j]);
sum+=gra[i][j];
}
}
if(n%2==1 || m%2==1){
jishulu();
}
else oushulu();
}
return 0;
}
hdu5402 Travelling Salesman Problem的更多相关文章
- [hdu5402 Travelling Salesman Problem]YY
题意:给一个n*m的矩形,每个格子有一个非负数,求一条从(1,1)到(n,m)的路径(不能经过重复的格子),使得经过的数的和最大,输出具体的方案 思路:对于row为奇数的情况,一行行扫下来即可全部走完 ...
- PAT A1150 Travelling Salesman Problem (25 分)——图的遍历
The "travelling salesman problem" asks the following question: "Given a list of citie ...
- PAT 甲级 1150 Travelling Salesman Problem
https://pintia.cn/problem-sets/994805342720868352/problems/1038430013544464384 The "travelling ...
- 构造 - HDU 5402 Travelling Salesman Problem
Travelling Salesman Problem Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=5402 Mean: 现有一 ...
- 1150 Travelling Salesman Problem(25 分)
The "travelling salesman problem" asks the following question: "Given a list of citie ...
- HDU 5402 Travelling Salesman Problem (构造)(好题)
大致题意:n*m的非负数矩阵,从(1,1) 仅仅能向四面走,一直走到(n,m)为终点.路径的权就是数的和.输出一条权值最大的路径方案 思路:因为这是非负数,要是有负数就是神题了,要是n,m中有一个是奇 ...
- HDOJ 5402 Travelling Salesman Problem 模拟
行数或列数为奇数就能够所有走完. 行数和列数都是偶数,能够选择空出一个(x+y)为奇数的点. 假设要空出一个(x+y)为偶数的点,则必须空出其它(x+y)为奇数的点 Travelling Salesm ...
- PAT_A1150#Travelling Salesman Problem
Source: PAT A1150 Travelling Salesman Problem (25 分) Description: The "travelling salesman prob ...
- HDU 5402 Travelling Salesman Problem (模拟 有规律)(左上角到右下角路径权值最大,输出路径)
Travelling Salesman Problem Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 65536/65536 K (J ...
随机推荐
- SpringBoot初识日志
SpringBoot初识日志 1.市面上的日志框架: JUL.JCL.Jboss-logging.logback.log4j.log4j2.slf4j- 日志门面(日志的抽象层) 日志实现 SLF4j ...
- 【RAC】10grac添加节点,详细步骤
RAC物理结构 现在的RAC环境是二个节点: dbp,dbs, 这个实验就是添加节点dbi. dbp,dbs和dbi节点的信息规划如下: 服务器主机名 dbp dbs dbi 公共IP地址(eth0) ...
- CVE-2020-0796复现
今天整理资料时发现了之前存的一个cve漏洞复现过程,当时打算跟着复现来着,后来也没去复现,今天刚好有时间,所以来复现一下这个漏洞 漏洞讲解 https://www.freebuf.com/vuls/2 ...
- 安装python性能检测工具line_profiler
line_profiler是一款监测python的CPU密集型性能问题的强大工具,可以对函数进行逐行分析,在linux上安装时一切正常,然而今天在win10 64位系统安装失败了 pip3 insta ...
- 2021年【线上】lammps分子动力学技术实战培训班
材料模拟分子动力学课程 3月19号--22号 远程在线课 lammps分子动力学课程 3月12号--15号 远程在线课 第一性原理VASP实战课 3月25号-28号 远程在线课 量子化学Gaussia ...
- 基于循环队列的BFS的原理及实现
文章首发于微信公众号:几何思维 1.故事起源 有一只蚂蚁出去寻找食物,无意中进入了一个迷宫.蚂蚁只能向上.下.左.右4个方向走,迷宫中有墙和水的地方都无法通行.这时蚂蚁犯难了,怎样才能找出到食物的最短 ...
- Flink可靠性的基石-checkpoint机制详细解析
Checkpoint介绍 checkpoint机制是Flink可靠性的基石,可以保证Flink集群在某个算子因为某些原因(如 异常退出)出现故障时,能够将整个应用流图的状态恢复到故障之前的某一状态,保 ...
- java虚拟机入门(三)- 你了解对象吗
对象对于java程序员来说,那是想要多少就有多少,所以那些嘲笑程序员的单身狗,哼,只有无知使你们快乐,想我大java开发,何曾缺少过对象.我们不仅仅知道创建对象,还知道创建对象的过程是啥样的,不信?往 ...
- 常用的hadoop和yarn的端口总结
节点 默认端口 用途说明 HDFS DataNode 50010 datanode服务端口,用于数据传输 50075 http服务的端口 50475 https服务的端口 50020 ipc服务的端口 ...
- Linux文件系统之INode
本文转载自阮一峰博客:理解inode 一.inode是什么? 理解inode,要从文件储存说起. 文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector).每个扇区储存51 ...