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 ...
随机推荐
- UVA439 knightMoves (A*启发搜索)
第一个A*,纪念下. A*要保证最短路一定要估价函数小于等于实际值,越接近越好 估价函数取Manhattan距离除以二. //Rey #include<cstdio> #include&l ...
- codeforce Gym 100342H Hard Test (思考题)
题意:构造让Dijkstra单源最短路算法有效松弛次数最多的数据... 题解:构造,题意换种说法就是更新晚的路径要比更新早的路径短.因为所有点都会更新一次,那么按照更新时间形成一条链,即到最后一个点的 ...
- UVA 818 Cutting Chains 切断圆环链 (暴力dfs)
题意就是给一张无向图,去掉某些结点,然后连成一条链,问最少去掉几个结点. n很小n<=15,所以直接枚举2^15个状态就行啦. 链的条件是1.无环,2.没有度大于2的点,3.把n个散链连起来需要 ...
- win7便笺元数据损坏,最新解决办法
Windows7系统开机时出现“部分便笺的元数据已被破坏,便笺已将其恢复为默认值.”问题,最新解决办法,图文说明,亲测,希望可以帮到大家 工具/原料 Windows7系统 InkObj.dll.T ...
- hbuilder 夜神模拟器调试方法
1.首先下载好夜神模拟器2.查找已经安装的夜神模拟的端口,这里说一下夜神模拟器默认端口是62001,但是有些版本可能不是这个端口,怎么查找到底是哪个端口呢?按照如下顺序进行就可以查找到你按装的夜神模拟 ...
- Bootstrap 提示工具(Tooltip)插件
当您想要描述一个链接的时候,使用提示工具插件是一个不错的选择.Bootstrap提示工具插件做了很多的改进,例如不需要依赖图像,而是改变Css动画效果,用data属性来存储标题信息. 用法 提示工具( ...
- Oracle SQL语句性能优化方法大全
Oracle SQL语句性能优化方法大全 下面列举一些工作中常常会碰到的Oracle的SQL语句优化方法: 1.SQL语句尽量用大写的: 因为oracle总是先解析SQL语句,把小写的字母转换成大写的 ...
- 【转】Matlab的regionprops详解
matlab函数_连通区域 1. matlab函数bwareaopen──删除小面积对象格式:BW2 = bwareaopen(BW,P,conn)作用:删除二值图像BW中面积小于P的对象,默认情况下 ...
- 51nod——2502最多分成多少块
数据范围好小... 题目中没说要升序降序,不过样例解释里可以看出是要升序. #include <bits/stdc++.h> using namespace std; ],b[],visi ...
- 【转】C++后台开发应该读的书
转载自http://www.cnblogs.com/balloonwj/articles/9094905.html 作者 左雪菲 根据我的经验来谈一谈,先介绍一下我的情况,坐标上海,后台开发(也带团队 ...