被某题卡SB了,结果这题也没读好。。。以为每一个格子能够有负数就当搜索做了。怎么想也搜只是去,后来发现每一个格子是非负数,那么肯定就是构造题。

题解例如以下:

首先假设nn为奇数或者mm为奇数,那么显然能够遍历整个棋盘。

如果n,mn,m都为偶数,那么讲棋盘黑白染色,如果(1,1)(1,1)和(n,m)(n,m)都为黑色,那么这条路径中黑格个数比白格个数多11,而棋盘中黑白格子个数同样,所以必定有一个白格不会被经过,所以选择白格中权值最小的不经过。

构造方法是这样,首先RRRRDLLLLD这种路径走到这个格子所在行或者上一行。然后DRUR这样走到这个格子的所在列或者前一列。然后绕过这个格子。

然后走完这两行,接着按LLLLDRRRR这种路径往下走。

这题须要说明一下为什么这么选,由于假设你选的不是 (i,j)互为奇偶的格子的话,肯定有其余的(i,j)互为奇偶的格子不能被走到。假设选择的话,仅仅有这一个格子不会被走到,所以依据贪心肯定要选这个格子了.

恩。。挺脑洞的一题。写起来倒是不难。

#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn = 105;
const int INF = (1 << 30);
int mat[maxn][maxn];
int n,m,sum,minv,posx,posy;
void special_solve(){
printf("%d\n",sum - minv);
if(!(posx & 1)){
for(int i = 0; i < posx; i++){
char c = i & 1 ? 'L' : 'R';
for(int j = 1; j < m; j++)
printf("%c",c);
printf("D");
}
int base = 0;
for(int i = 0; i < m; i++){
char c = (i + base) & 1 ? 'U' : 'D';
if(i != posy)
printf("%c",c);
else
base ++;
if(i < m - 1)
printf("R");
}
for(int i = posx + 2; i < n; i++){
printf("D");
char c = i & 1 ? 'R' : 'L';
for(int j = 1; j < m; j++)
printf("%c",c);
}
}
else{
for(int i = 0; i < posx - 1; i++){
char c = i & 1 ? 'L' : 'R';
for(int j = 1; j < m; j++)
printf("%c",c);
printf("D");
}
int base = 0;
for(int i = 0; i < m; i++){
char c = (i + base) & 1 ? 'U' : 'D';
if(i != posy)
printf("%c",c);
else
base ++;
if(i < m - 1)
printf("R");
}
for(int i = posx + 1; i < n; i++){
printf("D");
char c = i & 1 ? 'R' : 'L';
for(int j = 1; j < m; j++)
printf("%c",c);
}
}
}
int main(){
while(scanf("%d%d",&n,&m) != EOF){
sum = 0;
minv = INF;
for(int i = 0; i < n; i++)
for(int j = 0; j < m; j++){
scanf("%d",&mat[i][j]);
sum += mat[i][j];
if((i + j) & 1){
if(minv > mat[i][j]){
posx = i;
posy = j;
minv = mat[i][j];
}
}
}
if(n & 1){
printf("%d\n",sum);
for(int i = 0; i < n; i++){
char c = i & 1 ? 'L' : 'R';
for(int j = 1; j < m; j++)
printf("%c",c);
if(i != n - 1)
printf("D");
}
}
else if(m & 1){
printf("%d\n",sum);
for(int i = 0; i < m; i++){
char c = i & 1 ? 'U' : 'D';
for(int j = 1; j < n; j++)
printf("%c",c);
if(i != m - 1)
printf("R");
}
}
else
special_solve();
puts("");
}
return 0;
}

【HDU 5402】Travelling Salesman Problem(构造)的更多相关文章

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

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

  2. 构造 - HDU 5402 Travelling Salesman Problem

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

  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的格子,从左上角走到右下角,每个格子只能走一遍,每个格子上有一个非负数,要让途径的数字和最大,最后要输出路径 思路:显然茹果n,m有一个是奇数的话所有格子的数字都能被我吃到,如果都是偶 ...

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

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

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

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

  10. HDOJ 5402 Travelling Salesman Problem 模拟

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

随机推荐

  1. iOS开发——Block使用小结

    Block语法看上去好像很特别,但它实际上是作为极普通的C语言源代码处理的.Block的实质,就是Objective-C的对象. 1.Block的语法 ^ 返回值类型 参数列表 表达式 可省略返回值类 ...

  2. (2016北京集训十三)【xsy1533】mushroom - bitset

    题解: 神题...我看到的时候直接吓懵了... 这是一道STL题...否则可能要写可持久化ETT或者可持久化Toptree? 用bitset来维护每个蘑菇上哪里有杂草,那么 对于操作1和操作2:可以预 ...

  3. git 常用操作命令行

    mkdir files : 创建一个名字为files的文件夹 cd files : 切换目录到files pwd ; 显示当前所在目录 ls -ah : 查看本地隐藏不可见的文件夹 git init ...

  4. luogu P2137 Gty的妹子树(分块,主席树)

    询问的化我们可以建主席树.然后修改?,树套树...,最后插入?炸了. 所以我们对操作进行分块. 我们先对整棵树建一个主席树.修改,插入我们先记录下来.然后询问的时候先对主席树查询,然后暴力遍历我们记录 ...

  5. 【jQuery03】简单的选项卡切换

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. 搭建rsync实时同步

    1.本实验基于centos6.5服务器做的 cat cat /etc/redhat-release 2.在配置环境之前需要先将服务器自带的rsync卸除 yum -y remove rsync* 3. ...

  7. 记录python之递归函数

    函数move(n,a,b,c)的定义是将n个圆盘从a借助b移动到c. def move(n,a,b,c): if n==1: print a,'-->',c move (n-1,a,c,b) p ...

  8. Visual Assist X 10.8.2036的Crack破解补丁.2014.05.22 (General release.)

    说起来,VA公布上一个Genreal Release版本号已经是过春节那阵子时候的事了,时间过得真快. VA小组又给我们带来了新版本号的Visual Assist编码助手的 2036 版本号, 这个版 ...

  9. nyoj--1011--So Easy[II](数学几何水题)

    So Easy[II] 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 这是一道基础的计算几何问题(其实这不提示大家也都看的出).问题描述如下: 给你一个N边形.且N边形 ...

  10. 基于python3-sklearn,Flask 的回归预测系统

    看到一副图片挺有意思,放在片头 序 "傍晚小街路面上沁出微雨后的湿润,和煦的西风吹来,抬头看看天边的晚霞,嗯明天又是一个好天气.走到水果摊旁,挑了个根蒂蜷缩.敲起来声音浊响的青绿西瓜,一边满 ...