2015 Multi-University Training Contest 9-1007 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).
3 3
2 3 3
3 3 3
3 3 2
25
RRDLLDRR
这是一道有趣的问题,怎样才干从左上到右下使经过路径和最大,每一个数字都是正数,那么假设能走全,肯定是走全比較好,所以当n||m有奇数时。可直接构造之,假设均为偶数时,能够发现,我能够绕啊绕的绕过一个点,剩下的都遍历,横纵坐标和偶数的无法仅仅避开这一个点。所以要想绕开这个点,必需要附带至少一个其他点且是能够单独避开的奇点。所以我们仅仅要找到偶点中最小的那个点绕开就好了。
这样全部情况都构造出来了。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
void print(int x,int y,char dir)
{
for(int i=x;i<y;i++)
printf("%c",dir);
} int f[111][111];
long long ret=0;
int x,y;
int m,n,mi;
int main()
{
while(scanf("%d%d",&m,&n)==2)
{
ret=0;
mi=0x3f3f3f3f;
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
{
scanf("%d",&f[i][j]);
ret+=f[i][j];
if((i+j)%2==1 && f[i][j]<mi)
{
mi=f[i][j];
x=i;
y=j;
}
}
if(m%2 == 1|| n%2==1)
{
cout<<ret<<'\n';
if(m%2==1)
{
for(int i=1;i<=m;i++)
{
if(i%2==1)
print(1,n,'R');
else
print(1,n,'L');
if(i!=m)
{
print(i,i+1,'D');
}
}
}
else
{
for(int i=1;i<=n;i++)
{
if(i%2==1)
print(1,m,'D');
else
print(1,m,'U');
if(i!=n)
print(i,i+1,'R');
}
}
}
else
{
cout<<ret-f[x][y]<<'\n';
if(x%2==1)
{
for(int i=1;i<x;i++)
{
if(i%2==1)
print(1,n,'R');
else
print(1,n,'L');
print(i,i+1,'D');
}
for(int i=1;i<=n;i++)
{
if(i<y)
if(i%2==1)
print(1,2,'D');
else
print(1,2,'U');
else
if(i>y)
{
if(i%2==0)
print(1,2,'D');
else
print(1,2,'U');
}
if(i!=n)
print(1,2,'R');
}
for(int i=x+2;i<=m;i++)
{
print(1,2,'D');
if(i%2==1)
print(1,n,'L');
else
print(1,n,'R');
}
}
else
{
for(int i=1;i<y;i++)
{
if(i%2==1)
print(1,m,'D');
else
print(1,m,'U');
print(1,2,'R');
}
for(int i=1;i<=m;i++)
{
if(i<x)
{
if(i%2==1)
print(1,2,'R');
else
print(1,2,'L');
}
else
if(i>x)
{
if(i%2==1)
print(1,2,'L');
else
print(1,2,'R');
}
if(i!=m)
print(1,2,'D');
}
for(int i=y+2;i<=n;i++)
{
print(1,2,'R');
if(i%2==1)
print(1,m,'U');
else
print(1,m,'D');
}
}
}
printf("\n");
}
return 0;
}
2015 Multi-University Training Contest 9-1007 Travelling Salesman Problem的更多相关文章
- 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 ...
- HDU 5402 Travelling Salesman Problem (模拟 有规律)(左上角到右下角路径权值最大,输出路径)
Travelling Salesman Problem Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 65536/65536 K (J ...
- 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 ...
- PAT_A1150#Travelling Salesman Problem
Source: PAT A1150 Travelling Salesman Problem (25 分) Description: The "travelling salesman prob ...
- 1150 Travelling Salesman Problem
The "travelling salesman problem" asks the following question: "Given a list of citie ...
- PAT-1150(Travelling Salesman Problem)旅行商问题简化+模拟图+简单回路判断
Travelling Salesman Problem PAT-1150 #include<iostream> #include<cstring> #include<st ...
随机推荐
- Hadoop推测执行机制问题
问题描述:MultipleOutputs使用时hdfs报错 // :: INFO mapreduce.Job: Task Id : attempt_1525336138932_1106 ...
- 微信小程序---账号注册与开发工具
(1)申请帐号 进入小程序注册页 根据指引填写信息和提交相应的资料,就可以拥有自己的小程序帐号. 在这个小程序管理平台,你可以管理你的小程序的权限,查看数据报表,发布小程序等操作. 登录 小程序后台 ...
- -- HTML标记大全参考手册[推荐]
-- HTML标记大全参考手册[推荐]总类(所有HTML文件都有的) 文件类型 <HTML></HTML> (放在档案的开头与结尾) 文件主题 <TITLE>&l ...
- Java 序列化Serializable详解(附详细例子)
Java 序列化Serializable详解(附详细例子) 1.什么是序列化和反序列化Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是 ...
- “完美”解决微信小程序购物车抛物动画,在连续点击时出现计算错误问题,定时器停不下来。
最近做,微信点餐小程序,遇到添加商品时出现抛物动画,参考借鉴了这位大神的方法 https://www.cnblogs.com/greengage/p/7815842.html 但出现了一个问题,连续点 ...
- GNU编译器学习 --> 如何链接外部库【Linking with external libraries】
库也就是我们常说的library,一个库是若干个已经编译过的目标文件(.obj)的集合,它可以被链接到程序里.那么我们最常见的使用就是,我们在编程时会调用一些函数,这些函数别人已经写好了,它就放在库里 ...
- 零基础入门学习Python(31)--永久存储:腌制一缸美味的泡菜
知识点 pickle( 泡菜 ) 模块介绍: pickle模块作用是持久化的储存数据. 在Python程序运行中得到了一些字符串.列表.字典等数据,想要长久的保存下来,方便以后使用, 而不是简单的放入 ...
- [转]TOpenDialog
转自:http://www.cnblogs.com/zhangzhifeng/archive/2011/08/04/2127395.html 1.TOpenDialog组件的典型用法“打开”对话框是用 ...
- 集训第五周动态规划 J题 括号匹配
Description We give the following inductive definition of a “regular brackets” sequence: the empty s ...
- AutoMapper 使用总结1
初识AutoMapper 在开始本篇文章之前,先来思考一个问题:一个项目分多层架构,如显示层.业务逻辑层.服务层.数据访问层.层与层访问需要数据载体,也就是类.如果多层通用一个类,一则会暴露出每层的字 ...