蓝桥杯:试题 算法训练 Remember the A La Mode

资源限制
时间限制:1.0s 内存限制:256.0MB

问题描述
  Hugh Samston经营着一个为今年的ICPC世界总决赛的参与者提供甜点的餐饮服务。他将会提供上面有冰激凌的饼片。为了满足不同的需求,他准备了许多不同的饼片和冰激凌。
  Hugh希望以一份饼片上一份冰激凌的方式来提供甜点。然而,作为一个商人,他希望能赚到尽可能多的钱。他知道不同种类的饼片和冰激凌组合的价格,也知道那些冰激凌和那些饼片不能组合在一起。
  Hugh想根据每种饼片和冰激凌的数量,以及之前提到的不同组合的情况,确定他能获得的利润的范围。
  
输入格式
  测试数据的输入一定会满足的格式。
  输入的第一行包含两个整数P, I,分别表示饼片和冰激凌的种类数。
  接下来一行包含P个整数,表示每种类型饼片的数量。
  接下来一行包含I个整数,表示每种类型冰激凌的数量。
  接下来P行,每行包含I个实数,表示每种类型饼片和冰激凌组合的结果。
  如果这种饼片和这种冰激凌可以组合,则为一个(0,10)的实数,表示这种组合的收益。
  否则,则为-1,表示这两种之间不能组合。
  
输出格式
  输出一行,以"(最小收益) to (最大收益)"的方式输出利润的范围。

请注意:所有的饼片和冰激凌都必须用完。
  
样例输入
2 3
40 50
27 30 33
1.11 1.27 0.70
-1 2 0.34

样例输出
91.70 to 105.87

数据规模和约定
  0 < P,I <= 50,每种类型饼片或冰激凌数量不超过100。

#include <iostream>
#include <cstring>
#include <iomanip>
#include <cstdio>
using namespace std;
int p,l;//p为饼干的种类,l为冰淇淋的种类
int pp[101],ll[101];//存放饼干和冰淇淋每种种类的数量
int ppp[101],lll[101];//保存复制pp和ll数组,二次使用
double income[101][101];//收益情况
double temp[101][101];//用来记录收益的高低
int zuo = 0,you =0;//下标//初始化数据
void init(){cin>>p>>l;for(int i =1;i <= p;i++){cin>>pp[i];ppp[i] = pp[i];}for(int j =1;j <= l;j++){cin>>ll[j];lll[j] = ll[j];}for(int k =1;k <= p;k++){for(int h = 1;h <= l;h++){cin>>income[k][h];}}for(int k =1;k <= p;k++){for(int h = 1;h <= l;h++){temp[k][h] = -1;}}int t;int time = p*l;/*为利润的高低标记排名,利润最高的为1,次之为2(如果利润相等,也不影响前后顺序),以此类推*/for(int y = 1;y <= time;y++){double max = -2;int left = 0,rigth = 0;//设立一个未标记数为最大值 for(int s =1;s <= p;s++){if(max != -2) break;for(int d = 1;d <= l;d++){if(temp[s][d] == -1 && income[s][d] != -1){max = income[s][d];left = s;rigth = d; break;}  }}for(int k =1;k <= p;k++){for(int h = 1;h <= l;h++){//当收益为0时,不取该组合,因此标记该组合为0 if(income[k][h] == -1 &&  temp[k][h] == -1){temp[k][h] = 0;}//查找当前未标记数中的最大收益值 else if(max <= income[k][h] && temp[k][h] == -1){max = income[k][h];left = k;rigth = h;}              }}temp[left][rigth] = y; }
}
//查询值为i的下标
void find_xiabiao(double temp[][101],int i){zuo = 0,you =0;for(int k =1;k <= p;k++){if(zuo != 0 && you != 0) break;for(int h = 1;h <= l;h++){if(temp[k][h] == i){zuo = k;you = h;break;}}}
}double find_max(){double sum = 0;for(int i = 1; i <= p*l;i++){find_xiabiao(temp,i); //获得下标索引if(pp[zuo] >=  ll[you] && pp[zuo]!= 0 &&ll[you]!= 0){sum += ll[you]*income[zuo][you];pp[zuo] -= ll[you];ll[you] -= ll[you];}else if(pp[zuo] <=  ll[you] && pp[zuo]!= 0 &&ll[you]!= 0){sum += pp[zuo]*income[zuo][you];pp[zuo] -= pp[zuo];ll[you] -= pp[zuo];}}return sum;
}
double find_min(){double sum = 0;for(int i = p*l; i >= 1;i--){find_xiabiao(temp,i);//获得下标索引 if(zuo == 0 && you == 0) continue;        if(ppp[zuo] >=  lll[you] && ppp[zuo]!= 0 &&lll[you]!= 0){sum += lll[you]*income[zuo][you];ppp[zuo] -= lll[you];lll[you] -= lll[you];}else if(ppp[zuo] <=  lll[you] && ppp[zuo]!= 0 &&lll[you]!= 0){sum += ppp[zuo]*income[zuo][you];ppp[zuo] -= ppp[zuo];lll[you] -= ppp[zuo];}}return sum;
}
int main()
{init();cout<<setiosflags(ios::fixed)<<setprecision(2);cout<<find_min()<<" "<<"to "<<find_max();return 0;
}

说明:
①输入数据
②将利润值得大小进行标记,-1得标为0,不考虑他得计算。接下来根据利润从高到低得顺序标记,从1开始标记,如果有利润得值相同,则连续标记即可。
③根据标记进行计算,求最高值时,从标记1开始计算;求最低值时从标记号最大得数开始计算

本作者的这个方法还是有一定的局限性,所以未能取得100分,但是该方法还是可以值得参考思考下

蓝桥杯:试题 算法训练 Remember the A La Mode相关推荐

  1. 蓝桥杯 试题 算法训练 无聊的逗 C++ 详解

    题目: 逗志芃在干了很多事情后终于闲下来了,然后就陷入了深深的无聊中.不过他想到了一个游戏来使他更无聊.他拿出n个木棍,然后选出其中一些粘成一根长的,然后再选一些粘成另一个长的,他想知道在两根一样长的 ...

  2. 蓝桥杯 试题 算法训练 无聊的逗 C++ 详解 - 未完善

    题目: 逗志芃在干了很多事情后终于闲下来了,然后就陷入了深深的无聊中.不过他想到了一个游戏来使他更无聊.他拿出n个木棍,然后选出其中一些粘成一根长的,然后再选一些粘成另一个长的,他想知道在两根一样长的 ...

  3. 蓝桥杯 试题 算法训练 筛选号码 Java

    蓝桥杯 试题 算法训练 筛选号码Java 算法训练 筛选号码 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 有n个人围成一圈,顺序排号(编号为1到n).从第1个人开始报数(从1到3 ...

  4. 蓝桥杯 试题 算法训练 无聊的逗

    蓝桥杯 试题 算法训练 无聊的逗 问题描述 逗志芃在干了很多事情后终于闲下来了,然后就陷入了深深的无聊中.不过他想到了一个游戏来使他更无聊.他拿出n个木棍,然后选出其中一些粘成一根长的,然后再选一些粘 ...

  5. 蓝桥杯试题 算法训练 绘制地图

    蓝桥杯试题 算法训练 绘制地图 问题描述 最近,WYF正准备参观他的点卡工厂.WYF集团的经理氰垃圾需要帮助WYF设计参"观"路线.现在,氰垃圾知道一下几件事情: 1.WYF的点卡 ...

  6. 蓝桥杯试题 算法训练 Have You Ever Heard About the Word?

    试题 算法训练 Have You Ever Heard About the Word? 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 一个字符串的子串是该字符串的一段连续子序列,如 ...

  7. 蓝桥杯试题 算法训练 印章

    试题 算法训练 印章 C/C++ 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 共有n种图案的印章,每种图案的出现概率相同.小A买了m张印章,求小A集齐n种印章的概率. 输入格式 ...

  8. 蓝桥杯试题 算法训练 幂方分解

    试题 算法训练 幂方分解 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 任何一个正整数都可以用2的幂次方表示.例如: 137=27+23+20 同时约定方次用括号来表示,即ab 可 ...

  9. 蓝桥杯试题 算法训练 绘制地图 C/C++解法 AC(最近,WYF正准备参观他的点卡工厂。WYF集团的经理氰垃圾需要帮助WYF设计参“观”路线。现在,氰垃圾知道一下几件事情。。。。)

    试题 算法训练 绘制地图 问题描述 最近,WYF正准备参观他的点卡工厂.WYF集团的经理氰垃圾需要帮助WYF设计参"观"路线.现在,氰垃圾知道一下几件事情: 1.WYF的点卡工厂构 ...

  10. 蓝桥杯 试题 算法训练 印章

    试题 算法训练 印章 动态规划: 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 共有n种图案的印章,每种图案的出现概率相同.小A买了m张印章,求小A集齐n种印章的概率. 输入格式 ...

最新文章

  1. Hive JDBC:Permission denied: user=anonymous, access=EXECUTE, inode=”/tmp”
  2. android 怎么换行,android textview 怎么换行?
  3. deepin执行apt-get update报错https://deb.opera.com/opera-stable stable Release” 没有 Release 文件N: 无法安全地用该
  4. (七)Vue 项目规范
  5. Web Worker javascript多线程编程(一)
  6. Kubernetes 在知名互联网公司的(dotnet)落地实践
  7. helm安装_如何利用 Helm 在 Kubernetes 上快速部署 Jenkins
  8. 关于Eureka的几个问题
  9. Python基础笔记(三) dict、set、函数
  10. python能处理图片吗_python的Image和skimage处理图片
  11. (day 38 - 双指针) 剑指 Offer 52. 两个链表的第一个公共节点
  12. 如何通过IDEA看Java源码
  13. HTML 表格滚动锁定表头,实现固定行列
  14. 在linux中安装搜狗输入法,如何在ubuntu下安装搜狗输入法
  15. 工字型钢弹性截面模量计算公式_截面模量计算方法
  16. Linux软RAID换硬盘
  17. 33V瞬变抑制二极管型号,怎么选型选用?
  18. ios用 shell 自动打包静态库(里面包含真机和模拟器)
  19. JAVA新手上路-2-javac编译
  20. 免费的java开发工具_Java那些最常用的免费开放工具,分享这15个!

热门文章

  1. 惨痛的春秋航班的经历(春秋的评论,好坏,看完便知)
  2. (五)unity Shader之——————unity的光源类型和光照衰减
  3. 研报精选230428
  4. 分布式数据库理论知识之CAP理论、ACID原则及分布式事务一致性算法
  5. AutoEventWireup=false导致Page_Load事件未执行
  6. 谁有m55啊?帮忙测试一下我的这个游戏是否能在m55上运行。高分相送!
  7. Zakra WordPress多功能主题 免费博客主题
  8. ip访问次数统计 nginx_分析Nginx 5分钟内的 日志 然后统计出 访问次数最多的ip 地址 和次数...
  9. 斯人已化蝶,逝者如斯夫……
  10. 特立独行的ReentrantLock