hdoj5402 【模拟/构造】
题意:
给你一个矩阵,每个值都是非负,然后让你从左上角走到右下角,每个点只能走一次,求到终点的最大值,还要输出一条路径
思路:
一开始拿到还以为搜索之类的,但是发现神特么暴力+麻烦(因为路径这个东西。。。),虽然路径现在也是能写,但是开个数组。。。还是嫌麻烦。题意给出的非负的,而且如果矩阵的行或列是奇数的时候就一定能走完,具体走法,还是具体实现就好了。但是偶行偶列不行,后来想了一个是不是全部值-一个最小。。。随便举个反例就会知道,这个存在最小的绕不过去,还得搭上旁边的几个,所以才有了正确的解法,我们先去找那些能绕过去的位置,也就是饶过他,我可以通过其他的点走到右下角。
然后就是这样。。。。
1 0 1 0
0 1 0 1
1 0 1 0
0 1 0 1
0表示可以绕过去,也就是除了他我可以走完。
那么就在能绕过去那边找一个最小的,为什么这样就是对的呢,如果我绕过的是不能除了他就走完的位置的话,那势必会减少至少一个旁边的位置,所以我去找最小可以绕过的位置,然后饶过他,就是正确的方法。
然后我们只要去判断这个最小在哪一行就好了,最好就是两行,因为从起点出去,那个点在0位置的话,我们可以选定两行发现是一定满足从左上进,右下出,那么在这个两行前面的行我们就是右 下 左 再下,两行下面的行就是左 下 右 ,看情况再下,就是这样。。。
说的不好,但是代码还是很清楚的。。。
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int INF=1e4+10;
const int N=1e2+10;
int ma[N][N];
int main()
{
int n,m,sum;
int tmin;
int i,j;
int x,y;
while(~scanf("%d%d",&n,&m))
{
tmin=INF;
sum=0;
for(i=1; i<=n; i++)
{
for(j=1; j<=m; j++)
{
scanf("%d",&ma[i][j]);
sum+=ma[i][j];
if(m%2==0 && n%2==0)
{
if(i%2==0 && j%2!=0)
{
if(ma[i][j]<tmin)
{
tmin=ma[i][j];
x=i;
y=j;
}
}
if(i%2!=0 && j%2==0)
{
if(ma[i][j]<tmin)
{
tmin=ma[i][j];
x=i;
y=j;
}
}
}
}
}
if(n%2!=0)
{
printf("%d\n",sum);
for(i=1; i<=n; i++)
{
if(i%2!=0)
{
for(j=1; j<=m-1; j++)
printf("R");
}
if(i%2==0)
{
for(j=1; j<=m-1; j++)
printf("L");
}
if(i==n && j==m)
break;
else
printf("D");
}
}
else if(m%2!=0)
{
printf("%d\n",sum);
for(i=1; i<=m; i++)
{
if(i%2!=0)
{
for(j=1; j<=n-1; j++)
printf("D");
}
if(i%2==0)
{
for(j=1; j<=n-1; j++)
printf("U");
}
if(i==m && j==n)
break;
else
printf("R");
}
}
else
{
printf("%d\n",sum-tmin);
for(i=1; i<=n; i+=2)
{
if(x==i || x==i+1)
{
//上下
for(j=1; j<y; j++)
{
if(j%2!=0)
printf("D");
else
printf("U");
printf("R");
}
if(y<m)
printf("R");
//上下
for(j=y+1; j<=m; j++)
{
if(j%2!=0)
printf("U");
else
printf("D");
if(j<m)
printf("R");
}
if(i<n-1)
printf("D");
}
else if(x<i)//左下右
{
for(j=1; j<m; j++)
printf("L");
printf("D");
for(j=1; j<m; j++)
printf("R");
if(i<n-1)
printf("D");
}
else//右下左
{
for(j=1; j<m; j++)
printf("R");
printf("D");
for(j=1; j<m; j++)
printf("L");
printf("D");
}
}
}
printf("\n");
}
return 0;
}
/*
4 4
5 5 5 5
1 5 5 5
5 5 5 5
5 5 5 5
4 4
5 1 5 5
5 5 5 5
5 5 5 5
5 5 5 5
*/
hdoj5402 【模拟/构造】的更多相关文章
- 学习xss模拟构造攻击(第一篇)
本文作者:i春秋签约作家——rosectow 0×00前言 XSS又名叫CSS全程(cross site scriptting),中文名跨站脚本攻击,目前网站的常见漏洞之一,它的危害没有像上传漏洞,s ...
- Codeforces Round #397 by Kaspersky Lab and Barcelona Bootcamp (Div. 1 + Div. 2 combined) A B C D 水 模拟 构造
A. Neverending competitions time limit per test 2 seconds memory limit per test 512 megabytes input ...
- Codeforces Round #350 (Div. 2) F. Restore a Number 模拟构造题
F. Restore a Number Vasya decided to pass a very large integer n to Kate. First, he wrote that num ...
- Codeforces 791C. Bear and Different Names 模拟构造
C. Bear and Different Names time limit per test:1 second memory limit per test:256 megabytes input:s ...
- HDU 5402 模拟 构造 Travelling Salesman Problem
题意: 有一个n * m的数字矩阵,每个格子放着一个非负整数,从左上角走到右下角,每个格子最多走一次,问所经过的格子的最大权值之和是多少,并且输出一个路径. 分析: 如果n和m有一个是偶数的话,那么只 ...
- Codeforces 174B【模拟构造】
题意: 给你一个串只有小写字母和点,让你构造前缀是1-8,后缀是1-3长度的文件名: 思路: 那么以"."作为分割点,把字符串都拿出来,然后 首段长度<=8 OK; 中间&l ...
- [CSP-S模拟测试]:骆驼(模拟+构造)
题目描述 我们都熟悉走马步,现在我们定义一种新的移动方式——骆驼步,它在一个国际棋盘上的移动规则是这样的. 以看出,骆驼步可以向八个方向走动,且不能走出棋盘范围. 现在给出一个$N\times N$的 ...
- Dreamoon Likes Coloring(模拟+构造)
\(这题刚好撞到我的思路了,但是因为模拟......我看了几十遍测试数据....\) $首先当\sum_^m$小于n时一定无解 大于呢?那我们就要浪费一些区间(覆盖一些点,也就是多出来的点) 但是又不 ...
- CF733C Epidemic in Monstropolis[模拟 构造 贪心]
C. Epidemic in Monstropolis time limit per test 1 second memory limit per test 256 megabytes input s ...
随机推荐
- Python中ConfigParser模块应用
Python中ConfigParser模块应用 Python的ConfigParser模块定义了3个对INI文件进行操作的类 RawConfigParser.ConfigParser和SafeConf ...
- JS判断访问设备(userAgent)加载不同页面 JS判断客户端操作系统类型(platform)
//平台.设备和操作系统 var system ={ win : false, mac : false, xll : false }; //检测平台 var p = navigator.platfor ...
- ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml) 用javascript在客户端删除某一个cookie键值对 input点击链接另一个页面,各种操作。 C# 往线程里传参数的方法总结 TCP/IP 协议 用C#+Selenium+ChromeDriver 生成我的咕咚跑步路线地图 (转)值得学习百度开源70+项目
ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml) 我们都知道在使用WebApi的时候Controller会自动将Action的返回值自动进行各种序列化处理(序列化为 ...
- The user's guide what comes in the kernel Documentation directory
The Linux IPMI Driver --------------------- Corey Minyard <minyard@mvista.com> <minyard@acm ...
- Centos6-编译安装Redis
[root@tbwy02 ~]# cd /tools/[root@tbwy02 tools]# yum install -y wget gcc make tcl[root@tbwy02 tools]# ...
- 设计模式学习笔记——Template Method模板方法模式
可能是最简单的设计模式. 而且你我都用过而不自知. 因为,模板方法模式也者,就是面向对象中的继承.公用部分放在父类,子类继承父类,然后扩展.呵呵.
- Provided Maven Coordinates must be in the form 'groupId:artifactId:version'.
[hadoop@hadoop1 bin]$ ./spark-shell --packages org.mongodb.spark:mongo-spark-connector_2.10-2.2.1 Ex ...
- 搭建双系统后没有windows的引导程序
因为安装linux系统前没有安装引导程序,导致安装了linux系统后进入linux系统没有windows的引导程序,网上找了很多解决办法,也不能说是不好使,只是作为新手小白来说有点难以理解,最后无意中 ...
- eclipse4.3 解决没有check out as maven project
最近想工作之余写点测试demo,习惯了公司的开发环境,便决定自己搭建开发环境,首先是找到好用的eclipse,就是能够使用eclipse创建maven project工程,该工程能够被eclipse的 ...
- @class && #import
先前被问到@class和#import的区别,我很直白的说使用@class是对要引用的类进行一个声明,不让编译器报错,到后面要用的时候再引入相应的类,而#import则会引入类的所有实例变量和方法.接 ...