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 ...
随机推荐
- java开始到熟悉66-69
本次内容:DateFormat类 1.DateFormat类 package array; /** * 时间和字符串之间的转化 */ import java.text.DateFormat; impo ...
- c++面试题目(3)
这些东西有点烦,有点无聊.如果要去C++面试就看看吧.几年前网上搜索的.刚才看到,就整理一下,里面有些被我改了,感觉之前说的不对或不完善. 1.求下面函数的返回值( 微软) int func(x) ...
- JSON JavaScriptSerializer 字符串的长度超过了为 maxJsonLength 属性设置的值。
1.序列化: 以下代码在对象过大时会报错:进行序列化或反序列化时出错.字符串的长度超过了为 maxJsonLength 属性设置的值. //jsonObj比较大的时候会报错 var serialize ...
- C#面向对象 结构体和类的应用
- iOS 把数据库文件打包到mainbundle中,查找不到路径的解决的方法;以及在删除bundle中文件的可行性
在开发中有时我们须要把数据库文件打包到我们的项目中.一般我们都是在外部用工具生成数据库文件,然后拉入项目中.可是我们在程序中查找改文件时.返回的路径总是nil 解决的方法: 原因我们拉入其它资源文件( ...
- Intel processor brand names-Xeon,Core,Pentium,Celeron----Celeron
http://en.wikipedia.org/wiki/Celeron Celeron From Wikipedia, the free encyclopedia Celeron Produ ...
- ACM-ICPC如何起步[转]
ACM-ICPC如何起步 刚刚绝定投身ACM-ICPC的同学先要过两关. 第一关:程序设计语言 如果学校有开设相关课程,则省去了很多麻烦.如果没有则可以选择<程序设计导引及在线实践>作为教 ...
- Java获取域名
private static final char URL_SPLASH = '/'; private static final String URL_SCHEME_POSTFIX = ": ...
- 设计模式学习笔记——Decorator装饰模式
装饰模式的作用或动机就是,尽量避免继承,而使用关联.原因是层层继承下来,内容会越来越多,有失控的危险.就扩展性而言,用关联比用继承好.所谓的关联,A使用了B,就叫A关联了B. Component 抽象 ...
- WEBGIS控制图层的显示
看别人搞的GIS应用,常常有勾选.取消某个图层的操作,然后地图上就有相应的图形显隐,觉得好酷. 咋实现的? 其实说起来好像也不是特别复杂.在WEB端,实现该功能的原理和步骤是: 1.WEB端加载地图服 ...