jzoj 3813. 我要的幸福 (Standard IO)

Description
幸福/我要的幸福/渐渐清楚/梦想/理想/幻想/狂想/妄想/我只想坚持每一步/该走的方向/就算一路上/偶尔会沮丧/生活是自己/选择的衣裳/幸福/我要的幸福/没有束缚/幸福/我要的幸福/在不远处

Zyh相信自己想要的幸福在不远处。然而,zyh想要得到这幸福,还需要很长的一段路。Zyh坚持认为整个人生可以抽象为一个n*m的棋盘。左上角的格子为(1,1),右下角的格子为(n,m)。整个棋盘上的格子都有不同的事件,因为生活的多姿多彩,事件的权值Aij都两两不同。不幸的是,在整个人生中有若干个极其黑暗的事件,它们的权值Aij=0。更进一步说,对于Aij>0的事件,权值两两不同。
Zyh站在人生的起点(1,1),他想要走向人生的巅峰(n,m)。Zyh认为人只能前进,即若Zyh站在(a,b),他只能走向(a,b+1)或者(a+1,b)。并且Zyh认为黑暗的事件是绝对不可以触碰的,因为一旦经历就会坠入万丈深渊。Zyh会将自己所经历的事件的权值依次写出,形成一个n+m-1的序列。Zyh想知道其中字典序最小的序列是什么。若是人生过于艰难,没有一个合法序列,就输出”Oh,the life is too difficult!”,不包含引号。

Input
输入的第一行是两个正整数n和m。接着是n行m列的人生棋盘。

Output
输入只有一列,如果存在合法序列,则为n+m-1个用一个空格隔开的权值。否则就输出Oh,the life is too difficult!

Sample Input
输入1:
3 3
1 3 4
7 9 0
5 6 8
输入2:
2 3
1 0 3
0 4 5

Sample Output
输出1:
1 3 9 6 8
输出2:
Oh,the life is too difficult!

Data Constraint
对于20%的数据 n<10 m<10
对于60%的数据 n<=300 m<=300
对于100%的数据 n<=1000 m<=1000 Aij<=1e9

//written by zzy

题目大意:

从起点到终点的路径(有些不能走,只能向下或右走)的最小字典序

题解:

考虑从终点(n,m)往前倒着染色,被染到的点一定可以到达终点,再从起点开始贪心走即可。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 1005
using namespace std;

int i,j,n,m;
int a[N][N];
bool b[N][N];

void color(int x,int y)
{
	b[x][y]=true;
	if (x==1&&y==1) return;
	if (x-1>=1&&b[x-1][y]==0&&a[x-1][y]!=0) color(x-1,y);
	if (y-1>=1&&b[x][y-1]==0&&a[x][y-1]!=0) color(x,y-1); 
}

void dfs(int x,int y)
{
    printf("%d ",a[x][y]);
    if (x==n&&y==m) return;
    if (b[x][y+1]&&(b[x+1][y]==0||a[x][y+1]<a[x+1][y])) dfs(x,y+1);else
    if (b[x+1][y]&&(b[x][y+1]==0||a[x][y+1]>a[x+1][y])) dfs(x+1,y);
}

int main()
{
	memset(b,0,sizeof(b));
	scanf("%d%d",&n,&m);
	for (i=1;i<=n;i++)
	 for (j=1;j<=m;j++)
	  scanf("%d",&a[i][j]);
    color(n,m);
    if (b[1][1]) dfs(1,1);
    else printf("Oh,the life is too difficult!");
} 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值