题目大意: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的更多相关文章

  1. 构造 - HDU 5402 Travelling Salesman Problem

    Travelling Salesman Problem Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=5402 Mean: 现有一 ...

  2. HDU 5402 Travelling Salesman Problem (构造)(好题)

    大致题意:n*m的非负数矩阵,从(1,1) 仅仅能向四面走,一直走到(n,m)为终点.路径的权就是数的和.输出一条权值最大的路径方案 思路:因为这是非负数,要是有负数就是神题了,要是n,m中有一个是奇 ...

  3. HDU 5402 Travelling Salesman Problem (模拟 有规律)(左上角到右下角路径权值最大,输出路径)

    Travelling Salesman Problem Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 K (J ...

  4. HDU 5402 Travelling Salesman Problem(棋盘染色 构造 多校啊)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5402 Problem Description Teacher Mai is in a maze wit ...

  5. HDU 5402 Travelling Salesman Problem(多校9 模拟)

    题目链接:pid=5402">http://acm.hdu.edu.cn/showproblem.php?pid=5402 题意:给出一个n×m的矩阵,位置(i.j)有一个非负权值. ...

  6. hdu 5402 Travelling Salesman Problem(大模拟)

    Problem Description Teacher Mai ,) to the bottom right corner (n,m). He can choose one direction and ...

  7. hdu 5402 Travelling Salesman Problem (技巧,未写完)

    题意:给一个n*m的矩阵,每个格子中有一个数字,每个格子仅可以走一次,问从(1,1)走到(n,m) 的路径点权之和. 思路: 想了挺久,就是有个问题不能短时间证明,所以不敢下手. 显然只要n和m其中一 ...

  8. HDU 5402(Travelling Salesman Problem-构造矩阵对角最长不相交路径)

    Travelling Salesman Problem Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 K (J ...

  9. HDOJ 5402 Travelling Salesman Problem 模拟

    行数或列数为奇数就能够所有走完. 行数和列数都是偶数,能够选择空出一个(x+y)为奇数的点. 假设要空出一个(x+y)为偶数的点,则必须空出其它(x+y)为奇数的点 Travelling Salesm ...

随机推荐

  1. uva297 Quadtrees (线段树思想,区间操作)

    借鉴了线段数区间操作的思想,只是把一个结点的孩子扩展到了4个, 结点k,四个孩子编号分别为4*k+1,4*k+2,4*k+3,4*K+4,从零开始. 根据层数,确定权值. #include<cs ...

  2. GCD 代码以及GCD思想

    # 欧几里得算法 现在,我们来学习一下欧几里得算法. 欧几里得算法又称辗转相除法,主要用于算求两个正数之间的最大公约数.对于最大公约数这个名称,其英文名称为(Greatest Common Divis ...

  3. 01_1_Socket实现

    01_1_Socket实现 1.什么是MIME Multipurpos Internet Mail Extension 指明白传送内容的格式 最早用于邮件附件 2.HTTP协议基础 HTTP(Hype ...

  4. lua在linxu和windows系统下的遍历目录的方法

    在windows下遍历目录使用lfs库:例如遍历整个目录下的所有文件 local lfs = require "lfs" function findPathName(path)  ...

  5. (66)zabbix导入/导出配置文件

    通过导入/导出zabbix配置文件,我们可以将自己写好的模板等配置在网络上分享,我们也可以导入网络上分享的配置文件 配置文件有两种格式,分为为xml与json,通过zabbix管理界面可以导出xml, ...

  6. 【Python学习之六】高阶函数2(map、reduce、filter、sorted)

    3.filter filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素.相当于一 ...

  7. Linux下打包解压命令

    tar 压缩: tar -cvjpf etc.tar.bz2 /etc //-c为创建一个打包文件,相应的-f后面接创建的文件的名称,使用了.tar.bz2后缀,-j标志使用bzip2压缩,最后面为具 ...

  8. LeetCode(304)Range Sum Query 2D - Immutable

    题目 Given a 2D matrix matrix, find the sum of the elements inside the rectangle defined by its upper ...

  9. German Collegiate Programming Contest 2015

    // Legacy Code #include <iostream> #include <cstdio> #include <cstring> #include & ...

  10. springboot-vue-前后端数据交互

    前端项目: pom文件: <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&quo ...