zoukankan      html  css  js  c++  java
  • NOIP模拟题【我要的幸福】

    描述

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

    输入输出格式

    输入

      输入的第一行是两个正整数n和m。接着是n行m列的人生棋盘。
      n<=1000 m<=1000 Aij<=1e9

    输出

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

    输入输出样例

    输入样例

    3 3
    1 3 4
    7 9 0
    5 6 8

    输出样例

    1 3 9 6 8
    

    解题思路

      一拿到这道题,果断贪心,可是万一搜到的路上有0怎么办呢?所以,我们先从终点向回搜,判断道路是否能走,并且没走到终点,就输出Oh,the life is too difficult!

      然后再从起点开始搜,每次去取的输出就行了。

    题解

      

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int n,m;
     4 int mp[1001][1001]; 
     5 bool flag[1001][1001];
     6 int dir[4][2]={-1,0,0,-1,1,0,-1,0};
     7 struct node{
     8     int x;
     9     int y;
    10 };
    11 inline int read()
    12 {
    13     int data=0; char ch=0;
    14     while(ch<'0' || ch>'9') ch=getchar();
    15     while(ch>='0' && ch<='9') data=data*10+ch-'0',ch=getchar();
    16     return data;
    17 }
    18 int main()
    19 {
    20     cin>>n>>m;
    21     for(int i=1;i<=n;i++)
    22     {
    23         for(int j=1;j<=m;j++)
    24         {
    25             mp[i][j]=read();//快读优化 
    26         }
    27     }
    28     flag[n][m]=true;//终点能到达 
    29     for(int i=n;i;i--)
    30         for(int j=m;j;j--)
    31         {
    32             if(!mp[i][j])//是0不走 
    33             {
    34                 flag[i][j]=false;
    35                 continue;
    36             }
    37             if(i==n&&j==m)continue;
    38             flag[i][j]=flag[i+1][j]|flag[i][j+1];//如果有一条路能走,就能到达 
    39         }
    40     if(!flag[1][1])//没有路径 
    41     {
    42         cout<<"Oh,the life is too difficult!";
    43         return 0;
    44     }
    45     int x=1,y=1;//起点开始搜 
    46     while(x!=n||y!=m)
    47     {
    48         cout<<mp[x][y]<<" ";//输出 
    49         if(!flag[x][y+1]||y+1>m)x++;
    50         else    if(!flag[x+1][y]||x+1>n)y++;
    51         else    if(mp[x][y+1]<mp[x+1][y])y++;
    52         else x++;
    53     }
    54     cout<<mp[n][m];//输出终点的 
    55 }
  • 相关阅读:
    Sublime text 2 编辑器
    SWF文件版本支持映射表
    sql SET DATEFORMAT对日期处理的影响
    关于 getQualifiedDefinitionNames() 的使用场景
    prototypephotoarchive.cs
    jQuery easyui layout布局自适应浏览器大小
    iteratorfamilytree.cs
    内存利用率
    SET LANGUAGE对日期处理的影响示例
    mbox:Unix 的入门级邮箱
  • 原文地址:https://www.cnblogs.com/hualian/p/11193833.html
Copyright © 2011-2022 走看看