【蓝桥杯】试题 算法训练 最大获利(C语言)

问题描述
  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
 
思路:先读题,读不懂读第二遍,反复读,读懂之后代码就很简单了,注意他的数据数据规模,要用long long;
#include <stdio.h>
int main(int argc, char *argv[])
{
     int a[101][101],b[101][101];//定义四个二维数组 
     long long c[101][101],d[101][101]; 
     int m/*时间段*/,n/*店的个数*/;
     int i,j;
     scanf("%d %d",&n,&m); 
     for(i = 0;i < n;i++){
         for(j = 0;j < m;j++){
          scanf("%d",&a[i][j]);//服务员的个数 
         }
     } 
     
      for(i = 0;i < n;i++){
         for(j = 0;j < m;j++){
          scanf("%d",&b[i][j]);
         }
     } 
     
      for(i = 0;i < n;i++){
         for(j = 0;j < m;j++){
          scanf("%lld",&c[i][j]);//他cij的值特别大,所以要用long long 
         }
     }
//题意是一个服务员只能服务一个顾客,多了他就不干了(好傻啊,QAQ)      
      for(i = 0;i < n;i++){
         for(j = 0;j < m;j++){
          if(a[i][j] < b[i][j]){//当服务员的数量小于顾客的数量时 
              d[i][j] = c[i][j] * a[i][j];//服务员 * 金额 
          }
          else{
             d[i][j] = b[i][j] * c[i][j];//顾客数 * 金额 
          }
         }
       }
       
       long long cns = 0;
       for(i = 0;i < n;i++){
           long long max = 0;//取每家店的最大值 
         for(j = 0;j < m;j++){
          if(d[i][j] >= max){
              max = d[i][j];
          }
         }
          cns += max;//累加 
     } 
         printf("%lld",cns);
      return 0;
}

 

 

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

个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!

如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!

posted @ 2020-08-24 18:06  比尔的歌  阅读(234)  评论(0)    收藏  举报