• 地形图


    【题目描述】

    地形图可通过一个高度矩阵表示,矩阵中每一个位置都有一个数hij(0 <= hij <= 105)表示这个坐标的海拔,称为海拔图。

    现已知主视图、左视图,询问可能的体积的最大值和最小值。

    【输入描述】

    第一行输入两个数n、m,分别表示海拔图的长和宽;

    第二行输入n个数,表示主视图上每一个位置的高度;

    第三行输入m个数,表示左视图上每一个位置的高度。

    【输出描述】

    输出两个数,分别表示可能的体积的最大值和最小值。

    【输入样例】

    2 2

    1 1

    1 1

    【输出样例】

    2 4

    【数据范围及提示】

    样例中,最大最小值对应的海拔图分别为:

    1 1  1 0

    1 1  0 1

    对于10%的数据,n = m = 1;

    对于10%的数据,n = m = 2;

    对于20%的数据,1 <= n,m <= 3,0 <= hij <= 3;

    对于100%的数据,1 <= n,m <= 1000,0 <= hij <= 1000。

    源代码:
    
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    int n,m,Max,Min,Front[1001],Left[1001];
    bool f1[1001],f2[1001];
    int main() 
    {
        scanf("%d%d",&n,&m);
        for (int a=1;a<=n;a++)
          scanf("%d",&Front[a]);
        for (int a=1;a<=m;a++)
          scanf("%d",&Left[a]);
        for (int a=1;a<=n;a++)
          for (int b=1;b<=m;b++)
          {
            Max+=min(Front[a],Left[b]);
            if (Front[a]==Left[b]&&!f1[a]&&!f2[b]) //累加重合部分。
            {
                f1[a]=f2[b]=true; 
                Min+=Front[a];
            }
          }
        for (int a=1;a<=n;a++) //如果不加,不符题意,故必须加上。
          if (!f1[a]) //找到过即为重合部分。
            Min+=Front[a];
        for (int a=1;a<=m;a++)
          if (!f2[a])
            Min+=Left[a];
        printf("%d %d",Max,Min);
        return 0;
    }
    
    /*
        这道题需要动点脑子。
        寻找最大体积的思想应该是贪得无厌,只要符合题意就加上,即为:Max+=min(Front[i],Left[j]);
        寻找最小体积的思想应该是迫不得已,先把重合的部分加上,再把符合题意的临界部分加上。
    */
  • 相关阅读:
    Shell 函数
    Shell test命令/流程控制
    Shell 变量/echo命令
    Linux vi/vim and linux yum 命令
    Linux磁盘管理
    Linux 用户和用户组管理
    Linux 文件与目录管理
    Linux root用户密码重置,远程登陆,文件基本属性
    Linux简介安装、系统启动过程、目录结构
    Linux系统安装时分区的介绍
  • 原文地址:https://www.cnblogs.com/Ackermann/p/5931995.html
Copyright © 2020-2023  润新知