zoukankan      html  css  js  c++  java
  • 蓝桥杯 最大获利 模拟

    问题描述
      Chakra是一位年轻有为的企业家,最近他在进军餐饮行业。他在各地开拓市场,共买下了N个饭店。在初期的市场调研中,他将一天划分为M个时间段,并且知道第i个饭店在第j个时间段内,会有Aij位服务员当值和Bij位客户光临。他还分析了不同饭店不同时间段客户的需求,得到第i个饭店在第j个时间段内,平均每位客户消费Cij元。为了创设品牌形象,Chakra决定每个饭店每天只选择一个时间段营业,每个服务员至多接待一位顾客(若顾客数多于服务员数,超过部分的顾客当天就无法在该店消费了)。
      企业家的目的终究还是获利。请你安排营业时间,并告诉Chakra每天消费总额最多为多少。
    输入格式
      第一行两个整数,N、M。
      第二行开始依次给出三个矩阵A(N*M)、B(N*M)、C(N*M)。
    输出格式
      一行一个整数,最大消费总额。
    样例输入
    2 3
    1 2 3
    3 2 1
    3 2 1
    1 2 3
    4 5 2
    3 1 6
    样例输出
    16
    数据规模和约定
      1 <= M,N <= 100
      1 <= Aij, Bij <= 5000
      0 <= Cij <= 10^9
    解题思路:读懂题意就很容易了,数据范围最大值为100*5000*10^9 = 5 * 10^14,用 long long 存储。
    普通做法:
     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 long long a[105][105], b[105][105], c[105][105];
     4 int main() {
     5     int n, m;
     6     cin >> n >> m;
     7     //a数组输入服务员信息 
     8     for (int i = 0; i < n; i++) {
     9         for (int j = 0; j < m; j++) {
    10             cin >> a[i][j];
    11         }
    12     }
    13     //b数组输入顾客信息 
    14     for (int i = 0; i < n; i++) {
    15         for (int j = 0; j < m; j++) {
    16             cin >> b[i][j];
    17         }
    18     }
    19     //c数组输入顾客营业额信息 
    20     for (int i = 0; i < n; i++) {
    21         for (int j = 0; j < m; j++) {
    22             cin >> c[i][j];
    23         }
    24     }
    25     //对于a数组和b数组,每一位上取营业员数和顾客数量的最小值,作为成功提供营业的数量
    26     /*
    27         样例分析:a数组为: 1 2 3
    28                         3 2 1
    29                 b数组为: 3 2 1
    30                         1 2 3
    31         每一位上取营业员数和顾客数量的最小值
    32         所以成功提供营业的数量数组d:
    33                 d数组为: 1 2 1
    34                         1 2 1                        
    35                 c数组为: 4 5 2
    36                         3 1 6 
    37         把d数组依次乘以c数组得出答案营业额数组e :
    38                 e数组为 :4 10 2
    39                         3  2 6 
    40         分析e数组,样例是2个饭店,3个时间段
    41                 第一个饭店在第一个时间段的营业额是4 
    42                 第一个饭店在第二个时间段的营业额是10
    43                 第一个饭店在第三个时间段的营业额是2
    44                 第二个饭店在第一个时间段的营业额是3
    45                 第二个饭店在第二个时间段的营业额是2
    46                 第二个饭店在第三个时间段的营业额是6
    47                 所以最终答案为10+6=16 
    48     */ 
    49     for (int i = 0; i < n; i++) { //在a数组和b数组每一位中选出最小值乘以c数组 
    50         for (int j = 0; j < m; j++) {
    51             if (a[i][j] > b[i][j]) {
    52                 c[i][j] *= b[i][j];
    53             } else { 
    54                 c[i][j] *= a[i][j];
    55             }
    56         }
    57     } //现在c数组的值即为营业额数组,数值同上面e数组 
    58     /*for (int i = 0; i < n; i++) { 
    59         for (int j = 0; j < m; j++) {
    60             cout << c[i][j] << " "; 
    61         }
    62         cout << endl;
    63     }*/
    64     for (int i = 0; i < n; i++) { //对二维数组每一行进行冒泡排序 
    65         for (int k = 0; k < m; k++) {
    66             for (int j = 0; j < m - k - 1; j++) {
    67                 if (c[i][j] > c[i][j + 1]) {
    68                     swap(c[i][j], c[i][j + 1]);
    69                 }
    70             }
    71         }
    72     }
    73     /*for (int i = 0; i < n; i++) { 
    74         for (int j = 0; j < m; j++) {
    75             cout << c[i][j] << " "; 
    76         }
    77         cout << endl;
    78     }*/
    79     //排序后,现在c数组内的值为:2 4 10
    80     //                     2 3 6 
    81     long long ans = 0;
    82     for(int i = 0; i < n; i++) {
    83         ans += c[i][m - 1]; //加10,加6 
    84     }
    85     cout << ans << endl;
    86     return 0;
    87 }

    也可以只开一个数组:

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 long long a[105][105];
     4 int main() {
     5     int n, m;
     6     cin >> n >> m;
     7     for (int i = 0; i < n; i++) {
     8         for (int j = 0; j < m; j++) {
     9             cin >> a[i][j];
    10         }
    11     }
    12     long long t;
    13     for (int i = 0; i < n; i++) {
    14         for (int j = 0; j < m; j++) {
    15             cin >> t;
    16             a[i][j] = min(a[i][j], t);
    17         }
    18     }
    19     for (int i = 0; i < n; i++) {
    20         for (int j = 0; j < m; j++) {
    21             cin >> t;
    22             a[i][j] *= t;
    23         }
    24     }
    25     for (int i = 0; i < n; i++) {
    26         for (int k = 0; k < m; k++) {
    27             for (int j = 0; j < m - k - 1; j++) {
    28                 if (a[i][j] > a[i][j + 1]) {
    29                     swap(a[i][j], a[i][j + 1]);
    30                 }
    31             }
    32         }
    33     }
    34     long long ans = 0;
    35     for(int i = 0; i < n; i++) {
    36         ans += a[i][m - 1]; 
    37     }
    38     cout << ans << endl;
    39     return 0;
    40 }

     顺便复习下冒泡排序:

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int a[10];
     4 int main() {
     5     int n;
     6     cin >> n;
     7     for (int i = 0; i < n; i++) {
     8         cin >> a[i];
     9     }
    10     for (int i = 0; i < n; i++) {
    11         for (int j = 0; j < n - i - 1; j++) {
    12             if (a[j] > a[j + 1]) {
    13                 swap(a[j], a[j + 1]);
    14             }
    15         }
    16     }
    17     for (int i = 0; i < n; i++) {
    18         cout << a[i] << " ";
    19     }
    20     return 0;
    21 }
  • 相关阅读:
    官网英文版学习——RabbitMQ学习笔记(四)Work queues
    官网英文版学习——RabbitMQ学习笔记(三)Hello World!
    官网英文版学习——RabbitMQ学习笔记(二)RabbitMQ安装
    微服务中springboot启动问题
    nodejs-mime类型
    nodejs-mime类型
    const isProduction = process.env.NODE_ENV === 'production'; 作用
    单向绑定
    建立Model
    使用Sequelize
  • 原文地址:https://www.cnblogs.com/fx1998/p/12610818.html
Copyright © 2011-2022 走看看