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 ...
随机推荐
- 通过show status 命令了解各种sql的执行频率
show status like 'Com_%'; Com_select | 1 执行select操作的次数,一次查询只累加1 Com_insert ...
- Oracle获取session的IP方法
方法1 创建触发器: create orreplace trigger login_on alfterlogon on database begin dbms_application_info ...
- oracle创建恢复编录(recovery catalog)
1.在要作为恢复编录的数据库创建用户 create user rman identified by oracle default tablespace system temporary TABLESP ...
- 如何实现微信小程序动画?添加到我的小程序动画实现详细讲解,轻松学会动画开发!附壁纸小程序源码下载链接
为了让用户能尽可能多地使用小程序,也算是沉淀用户,现在很多小程序中,都有引导用户"添加到我的小程序"的操作提示,而且大多都是有动画效果.在高清壁纸推荐小程序首页,用户每次进入,都会 ...
- Electron入门Demo之桌面应用计算器笔记(二)
码文不易啊,转载请带上本文链接呀,感谢感谢 https://www.cnblogs.com/echoyya/p/14307996.html 在之前总结了一篇自学笔记,通过之前学习到的方法和知识,完成了 ...
- Kioptix Level 1
1. 简介 Vulnhub是一个提供各种漏洞环境的靶场平台. 个人学习目的:1,方便学习更多类型漏洞.2,为OSCP做打基础. 下载链接 https://www.vulnhub.com/entry/k ...
- 从定义到AST及其遍历方式,一文带你搞懂Antlr4
摘要:本文将首先介绍Antlr4 grammer的定义方式,如何通过Antlr4 grammer生成对应的AST,以及Antlr4 的两种AST遍历方式:Visitor方式和Listener方式. 1 ...
- 改变JavaScript中函数的内部this指向!
改变JavaScript中函数的内部this指向! 第一种方法 call call 可以 调用函数 + 改变函数内的this指向! var obj = { name: 'lvhang' } funct ...
- VirtualBox Guest Additions 下载地址以及简介
下载者可将以下链接粘贴到浏览器上,根据Vbox的版本找到自己对应的增强. http://download.virtualbox.org/virtualbox/5.0.10/ 虚拟机安装VBoxAddi ...
- Maven 本地仓库
概述 Maven 的本地资源库是用来存储所有项目的依赖关系(插件 Jar 和其他文件,这些文件被 Maven 下载)到本地文件夹.很简单,当你建立一个 Maven 项目,所有相关文件将被存储在你的 M ...