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 ...
随机推荐
- (C++ STL)list的实现
#include <iostream> using namespace std; //採用迭代器和空间配置器所实现的双向链表的基本功能 template<class _Ty,clas ...
- 网络编程中的常见陷阱之 0x十六进制数(C++字面值常量)
十六进制数相等的推断 请问例如以下程序的输出是神马? #include <iostream> #include <string> using namespace std; in ...
- Yii 清理缓存
html: <button onclick="clearCache()">ClearCache</button> js: function clearCac ...
- Ubuntu安装教程--Win7系统中含100M保留分区
1.检查 Win7 保留分区 1)进入 Win7 打开库目录.在左側栏找到"计算机",瞄准点右键选择"管理"菜单: 2)在出来的管理面板左边找到"磁盘 ...
- Django-权限信息自定义标签
自定义权限标签: import re from django.template import Library from django.conf import settings register = L ...
- Swift中字符串转化为Class的方法
Swift中字符串转化为Class的方法 在开发中有时候会根据字符串进行对应类的转化,这样我们就可以动态根据服务器返回的字段,动态的加载类,比如优酷,微博等APP会在节假日等动态的TabBar.这样可 ...
- cocoapods导入框架出错 The dependency `FMDB` is not used in any concrete target
问题描述: The dependency `FMDB` is not used in any concrete target 解决办法: 官网是这样给推荐的: 在创建Podfile的时候,用这种格式使 ...
- 设计模式学习笔记——State状态模式
从一个类中,将有关状态的处理分离出来,独立成类,并面向接口编程.作用是可以简化代码,避免过多的条件判断:if-else-
- JVM手动分配内存(转载)
原文内容很详细,不利于快速浏览,所以只保留了重点 原文地址 http://blog.csdn.net/mr__fang/article/details/47723767 内存检测工具jvisualVM ...
- jvm 命令
jps jps主要用来输出JVM中运行的进程状态信息.语法格式如下: jps [options] [hostid] 如果不指定hostid就默认为当前主机或服务器. -q 不输出类名.Jar名和传入 ...