HDU 5402 : Travelling Salesman Problem
题目大意:n*m的格子,从左上角走到右下角,每个格子只能走一遍,每个格子上有一个非负数,要让途径的数字和最大,最后要输出路径
思路:显然茹果n,m有一个是奇数的话所有格子的数字都能被我吃到,如果都是偶数呢?我把棋盘黑白染色,显然其中染成黑色的点我都是能不取一个,剩下的点我每个都取.
比赛的时候gkp说能不能取两个白色的块反而比只取一个黑色块结果大,想了下是不会的,证明很简单,n,m都是偶数那么黑色块和白色快的数量是相同的,每次只能上下左右走,也就是只能从一个颜色走到另一个颜色,如果能够避开两块或者更多的黑块而不经过白块,那么经过格子的路线必然不能能出现黑白黑白的序列,发现这个后证实了我的想法,比赛时CP敲了这题的代码,下面是我赛后AC的
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 5000009
#define ll long long
using namespace std;
const int dx[]={,,,,-};
const int dy[]={,,-,,};
const char di[]={'','R','L','D','U'};
int a[][],n,m,d=,visit[][];
void dfs(int x,int y,int l,int r,int xt,int yt)
{
if(x==n && y==r)return;
d = (d%)+;
visit[x][y] = ;
for(int i=;i<=;i++)
{
int xx = x + dx[i], yy = y + dy[i];
if(xx<||xx>n||visit[xx][yy]||yy<l || yy > r ||(xx==xt && yy == yt))continue;
printf("%c",di[i]);
dfs(xx,yy,l,r,xt,yt);
d = i;
break;
}
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(visit,,sizeof(visit));
int sum = ;
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
scanf("%d",&a[i][j]);
sum += a[i][j];
}
}
if(n&)
{
printf("%d\n",sum);
int u = (n-)>>;
while(u--)
{
for(int i=;i<m;i++)printf("R");
printf("D");
for(int i=;i<m;i++)printf("L");
printf("D");
}
for(int i=;i<m;i++)printf("R");
puts("");
}
else if(m&)
{
printf("%d\n",sum);
int u = (m-)>>;
while(u--)
{
for(int i=;i<n;i++)printf("D");
printf("R");
for(int i=;i<n;i++)printf("U");
printf("R");
}
for(int i=;i<n;i++)printf("D");
puts("");
}
else
{
int x=,y=,minx = 0x3f3f3f3f;
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)if((i+j)&)
{
if(minx>a[i][j])
{
minx=a[i][j];
x=i;
y=j;
}
}
}
printf("%d\n",sum-minx);
int u = (y-)>>,t=u;
while(t--)
{
for(int i=;i<n;i++)printf("D");
printf("R");
for(int i=;i<n;i++)printf("U");
printf("R");
}
d=;
dfs(,u*+,u*+,u*+,x,y);
int v = m-u*-;
v>>=;t=v;
while(t--)
{
printf("R");
for(int i=;i<n;i++)printf("U");
printf("R");
for(int i=;i<n;i++)printf("D");
}
puts("");
}
}
return ;
}
HDU 5402 : Travelling Salesman Problem的更多相关文章
- 构造 - HDU 5402 Travelling Salesman Problem
Travelling Salesman Problem Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=5402 Mean: 现有一 ...
- HDU 5402 Travelling Salesman Problem (构造)(好题)
大致题意:n*m的非负数矩阵,从(1,1) 仅仅能向四面走,一直走到(n,m)为终点.路径的权就是数的和.输出一条权值最大的路径方案 思路:因为这是非负数,要是有负数就是神题了,要是n,m中有一个是奇 ...
- HDU 5402 Travelling Salesman Problem (模拟 有规律)(左上角到右下角路径权值最大,输出路径)
Travelling Salesman Problem Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 65536/65536 K (J ...
- HDU 5402 Travelling Salesman Problem(棋盘染色 构造 多校啊)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5402 Problem Description Teacher Mai is in a maze wit ...
- HDU 5402 Travelling Salesman Problem(多校9 模拟)
题目链接:pid=5402">http://acm.hdu.edu.cn/showproblem.php?pid=5402 题意:给出一个n×m的矩阵,位置(i.j)有一个非负权值. ...
- hdu 5402 Travelling Salesman Problem(大模拟)
Problem Description Teacher Mai ,) to the bottom right corner (n,m). He can choose one direction and ...
- hdu 5402 Travelling Salesman Problem (技巧,未写完)
题意:给一个n*m的矩阵,每个格子中有一个数字,每个格子仅可以走一次,问从(1,1)走到(n,m) 的路径点权之和. 思路: 想了挺久,就是有个问题不能短时间证明,所以不敢下手. 显然只要n和m其中一 ...
- HDU 5402(Travelling Salesman Problem-构造矩阵对角最长不相交路径)
Travelling Salesman Problem Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 65536/65536 K (J ...
- HDOJ 5402 Travelling Salesman Problem 模拟
行数或列数为奇数就能够所有走完. 行数和列数都是偶数,能够选择空出一个(x+y)为奇数的点. 假设要空出一个(x+y)为偶数的点,则必须空出其它(x+y)为奇数的点 Travelling Salesm ...
随机推荐
- 复杂软件的考虑点与UITableView
对象的要素.组织.整体情况: 对象的生成步骤.生成的时间节点. 考虑UITableview.
- JS编程规范指南
原文:github.com/ryanmcdermott/clean-code-javascript 说明:本文翻译自 github 上的一个项目,只取部分精华. 一.变量 用有意义且常用的单词命名 / ...
- 第三单元OO总结
- 4G 内存 怎么只有2.99G可用
32为系统只可以识别3.25G,而且有256M的内存被显卡共享显存了,所以只剩2,99G.
- 在2d游戏中常用的向量方式
function cc.exports.VectorRotateByAngle(vector,angle)--计算向量旋转后的向量,angle:正数逆时针,负输顺时针 angle = angle*ma ...
- TCP、UDP的区别
TCP(传输控制协议): 1)提供IP环境下的数据可靠传输(一台计算机发出的字节流会无差错的发往网络上的其他计算机,而且计算机A接收数据包的时候,也会向计算机B回发数据包,这也会产生部分通信量),有效 ...
- Unity基础-脚本的基本使用
脚本的基本使用 定义与挂载monobehaviour 1.新建一个场景 2.新建脚本 using System.Collections; using System.Collections.Generi ...
- Cleaning Shifts POJ - 2376 (贪心题)
Cleaning Shifts Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 31194 Accepted: 7677 ...
- DP刷题记录(长期更新)
bzoj 2748 一个吉他手,有一个初始音量,有一个音量最大值max. 给定n个音量变化量,从第一个变化量开始,可以选择加上或者减去变化量.途中音量不能低于0,不能超过max. 求最后能达到的最大音 ...
- 水题:HDU1716-排列2
排列2 Problem Description Ray又对数字的列产生了兴趣: 现有四张卡片,用这四张卡片能排列出很多不同的4位数,要求按从小到大的顺序输出这些4位数. Input 每组数据占一行,代 ...