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. kubernets之pod简介

    一  k8s集群里面的最小单位是pod 1.1 一个较为简单的pod的配置文件 apiverson: api的版本号 kind: 资源的种类 metadata: pod的种类等相关信息 spec: p ...

  2. C语言目的概念(C语言学习笔记)

    什么是目 目是针对操作符来说的,一个操作符影响两个操作数就表示该操作符为双目运算符 举个例子: 1+2 这里的加号影响了1和2两个操作数,所以"+"就是双目运算符 +1,-1 这里 ...

  3. Xctf攻防世界—crypto—Normal_RSA

    下载压缩包后打开,看到两个文件flag.enc和pubkey.pem,根据文件名我们知道应该是密文及公钥 这里我们使用一款工具进行解密 工具链接:https://github.com/3summer/ ...

  4. DOS的FOR命令用法总结

    鉴于dos自带的关于for命令的帮助信息看起来太简单,自己总结了一下,并增加了必要的实例,以备日后自己查阅.其中一些地方可能存在理解错误,敬请指出. [转发请注明出处]

  5. Docker Hub公共镜像仓库的使用

    创建账号并登陆这里是登陆入口 登陆账号 登陆进入之后里面目前仓库,现在去创建一个 下面我选的是公共仓库,别人也可以访问到 在服务器上登陆进来,进行上传镜像到仓库 [root@docker ~]# do ...

  6. Jmeter二次开发——自定义函数

    在之前的博文中,Jmeter二次开发--基于Java请求,已介绍了Jmeter二次开发的基础情况,上次分享的是java请求开发,今天来分享下Jmeter中的函数开发.聊到Jmeter的函数,知道Jme ...

  7. js实现简单的俄罗斯方块小游戏

    js实现简单的俄罗斯方块小游戏 开始 1. 创建一个宽为 200px,高为 360px 的背景容器 <!DOCTYPE html> <html lang="en" ...

  8. 抽取一部分服务端做BFF(Backend For Frontend服务于前端的后端)

    Flutter+Serverless端到端研发架构实践 · 语雀 https://www.yuque.com/xytech/flutter/kdk9xc 2019-12-19 13:14 作者:闲鱼技 ...

  9. map 传递给函数的代价

    https://github.com/unknwon/the-way-to-go_ZH_CN/blob/master/eBook/08.1.md map 传递给函数的代价很小:在 32 位机器上占 4 ...

  10. Enabling Session Persistence 粘性会话

    NGINX Docs | HTTP Load Balancing https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-ba ...