Problem Description
Teacher Mai is in a maze with n rows
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.
 

Input
There are multiple test cases.

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.
 

Output
For each test case, in the first line, you should print the maximum sum.

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).
 

Sample Input

3 3
2 3 3
3 3 3
3 3 2
 

Sample Output

25
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的更多相关文章

  1. [hdu5402 Travelling Salesman Problem]YY

    题意:给一个n*m的矩形,每个格子有一个非负数,求一条从(1,1)到(n,m)的路径(不能经过重复的格子),使得经过的数的和最大,输出具体的方案 思路:对于row为奇数的情况,一行行扫下来即可全部走完 ...

  2. PAT A1150 Travelling Salesman Problem (25 分)——图的遍历

    The "travelling salesman problem" asks the following question: "Given a list of citie ...

  3. PAT 甲级 1150 Travelling Salesman Problem

    https://pintia.cn/problem-sets/994805342720868352/problems/1038430013544464384 The "travelling ...

  4. 构造 - HDU 5402 Travelling Salesman Problem

    Travelling Salesman Problem Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=5402 Mean: 现有一 ...

  5. 1150 Travelling Salesman Problem(25 分)

    The "travelling salesman problem" asks the following question: "Given a list of citie ...

  6. HDU 5402 Travelling Salesman Problem (构造)(好题)

    大致题意:n*m的非负数矩阵,从(1,1) 仅仅能向四面走,一直走到(n,m)为终点.路径的权就是数的和.输出一条权值最大的路径方案 思路:因为这是非负数,要是有负数就是神题了,要是n,m中有一个是奇 ...

  7. HDOJ 5402 Travelling Salesman Problem 模拟

    行数或列数为奇数就能够所有走完. 行数和列数都是偶数,能够选择空出一个(x+y)为奇数的点. 假设要空出一个(x+y)为偶数的点,则必须空出其它(x+y)为奇数的点 Travelling Salesm ...

  8. PAT_A1150#Travelling Salesman Problem

    Source: PAT A1150 Travelling Salesman Problem (25 分) Description: The "travelling salesman prob ...

  9. HDU 5402 Travelling Salesman Problem (模拟 有规律)(左上角到右下角路径权值最大,输出路径)

    Travelling Salesman Problem Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 K (J ...

随机推荐

  1. Docker学习笔记之进入容器Bash

    我们在创建容器的时候,如果容器的命令(command)不是/bin/bash的时候,使用docker attach命令是会卡住进不去容器的bash shell的.如下图所示: 所以,这里记录一个可以进 ...

  2. python常见题型

    语言特性 1. 谈谈对 Python 和其他语言的区别 2. 简述解释型和编译型编程语言 3. Python 的解释器种类以及相关特点? 4. Python3 和 Python2 的区别? 5. Py ...

  3. ASP.NET Core - JWT认证实现

    一.JWT结构 JWT介绍就太多了,这里主要关注下Jwt的结构. Jwt中包含三个部分:Header(头部).Payload(负载).Signature(签名) Header:描述 JWT 的元数据的 ...

  4. 【Oracle】归档日志的删除操作

    [root@sha3 oracle]# rman target / Recovery Manager: Release 10.2.0.4.0 - Production on Tue Jan 20 01 ...

  5. oracle可传输表空间测试

    使用RMAN在恢复表空间的时候,表空间数据文件DBID和恢复数据库的数据文件DBID必须相同 可传输表空间不需要这样,也就是可以快速的把这个表空间插入另一个数据库使用 可传输表空间内的对象必须不依赖与 ...

  6. Electron入门Demo之桌面应用计算器笔记(二)

    码文不易啊,转载请带上本文链接呀,感谢感谢 https://www.cnblogs.com/echoyya/p/14307996.html 在之前总结了一篇自学笔记,通过之前学习到的方法和知识,完成了 ...

  7. [Usaco2005 Mar]Out of Hay 干草危机

    题目描述 Bessie 计划调查N (2 <= N <= 2,000)个农场的干草情况,它从1号农场出发.农场之间总共有M (1 <= M <= 10,000)条双向道路,所有 ...

  8. 2021年【线上】lammps分子动力学技术实战培训班

    材料模拟分子动力学课程 3月19号--22号 远程在线课 lammps分子动力学课程 3月12号--15号 远程在线课 第一性原理VASP实战课 3月25号-28号 远程在线课 量子化学Gaussia ...

  9. 面对key数量多和区间查询低效问题:Hash索引趴窝,LSM树申请出场

    摘要:Hash索引有两个明显的限制:(1)当key的数量很多时,维护Hash索引会给内存带来很大的压力:(2)区间查询很低效.如何对这两个限制进行优化呢?这就轮到本文介绍的主角,LSM树,出场了. 我 ...

  10. 冷饭新炒:理解JDK中UUID的底层实现

    前提 UUID是Universally Unique IDentifier的缩写,翻译为通用唯一标识符或者全局唯一标识符.对于UUID的描述,下面摘录一下规范文件A Universally Uniqu ...