• 洛谷 P2096 最佳旅游线路


    某旅游区的街道成网格状。其中东西向的街道都是旅游街,南北向的街道都是林阴道。由于游客众多,旅游街被规定为单行道,游客在旅游街上只能从西向东走,在林阴道上则既可从南向北走,也可以从北向南走。

    阿龙想到这个旅游街游玩,他的好友阿福给了他一些建议,用分值表示所有旅游街相邻两个路口之见的街道值得游览的程度,分值是从-100到100的整数,所有林阴道不打分。所有分值不可能全是负分。如图:

    输入输出格式

    输入格式:

    输入文件的第一行是两个整数m和n,之间用一个空格隔开,m表示有m条旅游街(1≤m≤100 ),n 表示有(n+1)条林阴道(1≤n≤20001 )。接下来的m行依次给出了由北向南每条旅游街的分值信息。每行有n个整数,依次表示了自西向东旅游街每一小段的分值。同一行相邻两个数之间用一个空格隔开。

    输出格式:

    输出文件只有一行,是一个整数,表示你的程序找到的最佳游览线路的总分值。

    输入输出样例

    输入样例#1: 
    3 5 
    -50 -47 36 -30 -23 
    17 -19 -34 -13 -8 
    -42 -3 -43 34 -45 
    

    输出样例#1:

    84


    e,边做题,边写题解,大致读了遍题,是道 贪心,
    那么我们分析一下题,图大概是下面这个样子:




    ------------


    竖直方向可以随便走嘛,所以求出每一列
    的最大值,再做比较就可以了。


    ------------
    but,命运多舛,交了一遍,80分,有两个点过不了,重读遍题发现:对了,不一定要在最右边结束,也不一定在最左边开始,这点很重要,这才AC了此题。
    先上代码


    ------------

    八十分版

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<cmath>
     6 using namespace std;
     7 #define ll long long
     8 #define R register
     9 #define mmax 20002
    10 ll n,m,maxx=-0x7fffffff,ans;
    11 ll tu[102][mmax],da[mmax];
    12 int main()
    13 {
    14     /*freopen(".in","r",stdin);
    15     freopen(".out","w",stdout);*/
    16     cin>>m>>n;
    17     for(int i=1;i<=m;i++)
    18     for(int j=1;j<=n;j++)
    19     {
    20     cin>>tu[i][j]; //输入
    21     }
    22     /*for(int i=1;i<=m;i++)
    23         for(int j=1;j<=n;j++)
    24     {
    25     cout<<tu[i][j]<<" ";
    26     }*/
    27     
    28     for(int i=1;i<=n;i++)
    29     {
    30         maxx=-0x7ffffff;
    31         for(int j=1;j<=m;j++)
    32             {
    33                if(tu[j][i]>maxx)//注意i和j的顺序
    34                {
    35                da[i]=tu[j][i];
    36                maxx=tu[j][i];//
    37                }
    38               
    39             }
    40         }
    41         /*for(int i=1;i<=n;i++)
    42         {
    43             cout<<da[i]<<" ";//最大值
    44         }*/
    45         ll qzh1=0,qzh2=0;
    46         for(int i=1;i<=n;i++)
    47         {    
    48             qzh1=qzh2+da[i];
    49             qzh2=qzh1;
    50             if(ans<qzh1) ans=qzh1;
    51         }
    52         cout<<ans<<endl;
    53     /*fclose(stdin);
    54     fclose(stdout);*/
    55     return 0;
    56 }


    ------------
    一百分版

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<cmath>
     6 using namespace std;
     7 #define ll long long
     8 #define II int
     9 #define R register
    10 #define mmax 20002
    11 #define inf 0x7ffffff
    12 II n,m,ans;
    13 II tu[102][mmax],da[mmax];
    14 II mxsum(II *x){   //最大子串和
    15     II th=0;
    16     II mx=0;
    17     for(R II i=1;i<=n;++i){
    18         th+=x[i];
    19         if(th<0)th=0;
    20         else if(th>mx)mx=th;
    21     }
    22     return mx;
    23 }
    24 int main()
    25 {
    26     /*freopen(".in","r",stdin);
    27     freopen(".out","w",stdout);*/
    28     cin>>m>>n;
    29     for(int i=1;i<=m;i++)
    30     for(int j=1;j<=n;j++)
    31     {
    32         cin>>tu[i][j]; //输入
    33     }
    34     for(int i=1;i<=n;i++)
    35     {
    36         da[i]=-inf;
    37         for(int j=1;j<=m;j++)
    38            if(tu[j][i]>da[i])//注意i和j的顺序
    39            {
    40                    da[i]=tu[j][i];、、每列最大值
    41            }
    42     }
    43     cout<<mxsum(da)<<endl;
    44     /*fclose(stdin);
    45     fclose(stdout);*/
    46     return 0;
    47 }


    就这样了,好好打,别变棕哟QWQ。

  • 相关阅读:
    集中式(SVN)和分布式(Git)版本控制系统的简单比较
    Mac 提示安装包已损坏
    React 获取 url 参数 —— this.props.match
    编写一个 Chrome 浏览器扩展程序
    webpack 配置学习笔记
    Python 进阶学习笔记
    Python 入门学习笔记
    (转)Unity3d各种坑
    unity3d 网页游戏客户端工程构建方案
    (转)在Unity3D的网络游戏中实现资源动态加载
  • 原文地址:https://www.cnblogs.com/enceladus-return0/p/9404964.html
Copyright © 2020-2023  润新知