文章目录

  • 1. 题目
  • 2. 解题

1. 题目

给定 N 个无限容量且初始均空的水缸,每个水缸配有一个水桶用来打水,第 i 个水缸配备的水桶容量记作 bucket[i]。小扣有以下两种操作:

  • 升级水桶:选择任意一个水桶,使其容量增加为 bucket[i]+1
  • 蓄水:将全部水桶接满水,倒入各自对应的水缸

每个水缸对应最低蓄水量记作 vat[i],返回小扣至少需要多少次操作可以完成所有水缸蓄水要求。

注意:实际蓄水量 达到或超过 最低蓄水量,即完成蓄水要求。

示例 1:
输入:bucket = [1,3], vat = [6,8]
输出:4
解释:
第 1 次操作升级 bucket[0];
第 2 ~ 4 次操作均选择蓄水,即可完成蓄水要求。示例 2:
输入:bucket = [9,0,1], vat = [0,2,2]
输出:3
解释:
第 1 次操作均选择升级 bucket[1]
第 2~3 次操作选择蓄水,即可完成蓄水要求。提示:
1 <= bucket.length == vat.length <= 100
0 <= bucket[i], vat[i] <= 10^4

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/o8SXZn
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 枚举倒水次数,注意空的桶在水不为0时,必须 +1 次扩容
class Solution {public:int storeWater(vector<int>& bucket, vector<int>& vat) {int ans = 0, add=0;vector<pair<int,int>> bv;for(int i = 0; i < bucket.size(); i++) {int b = bucket[i];int v = vat[i];if(v == 0)//目标为0,不用倒水continue;if(b == 0)//桶为0,必须扩容b++,add++;bv.push_back({b,v});}sort(bv.begin(), bv.end(),[&](auto a, auto b){int x = ceil(double(a.second)/a.first), y = ceil(double(b.second)/b.first);return x > y;//最多需要倒的次数放前面});if(!bv.empty()){ans = ceil(double(bv[0].second)/bv[0].first);}   // 不扩容,需要倒多少次,不排序也可以for(int t = ans-1; t>0; --t){   // 倒的次数 t int ct = 0;//扩容次数for(int i = 0; i < bv.size(); ++i){int b = bv[i].first;int v = bv[i].second;if(b*t >= v)//t次可以倒满continue;ct += ceil(double(v)/t)-b;//不能倒满,每次要倒多少容量// 还差多少容量,就是需要额外扩容次数}ans = min(ans, ct+t);//扩容次数+倒的次数}return ans+add;}
};

24 ms 7.9 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode LCP 33. 蓄水(暴力枚举)相关推荐

  1. ⭐算法入门⭐《二分枚举》简单15 —— LeetCode LCP 18. 早餐组合

    文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 2.时间复杂度 3.代码详解 三.本题小知识 四.加群须知 一.题目 1.题目描述   小扣在秋日市集选择了一 ...

  2. LeetCode LCP 51. 烹饪料理(状态枚举)

    文章目录 1. 题目 2. 解题 1. 题目 欢迎各位勇者来到力扣城,城内设有烹饪锅供勇者制作料理,为自己恢复状态. 勇者背包内共有编号为 0 ~ 4 的五种食材,其中 meterials[j] 表示 ...

  3. 最大字段和 冲出暴力枚举

    这篇解题报告是对我最近一些题的总结,里面的代码都是我解题,优化,再优化的过程的记录,记录了自己对算法的完善与优化思路,还有对编程哲学的理解:do it,do it well. 很感谢孙老师您,让自己可 ...

  4. LeetCode 672. 灯泡开关 Ⅱ(枚举)

    1. 题目 现有一个房间,墙上挂有 n 只已经打开的灯泡和 4 个按钮. 在进行了 m 次未知操作后,你需要返回这 n 只灯泡可能有多少种不同的状态. 假设这 n 只灯泡被编号为 [1, 2, 3 - ...

  5. 2014牡丹江网络赛ZOJPretty Poem(暴力枚举)

    /* 将给定的一个字符串分解成ABABA 或者 ABABCAB的形式! 思路:暴力枚举A, B, C串! */ 1 #include<iostream> 2 #include<cst ...

  6. 新手入门刷题(专题三)暴力枚举

    新手入门刷题(专题三)暴力枚举--->持续更新 4.14 统计方形(数据加强版) 题目描述 有一个 n×m 方格的棋盘,求其方格包含多少正方形.长方形(不包含正方形). 输入格式 一行,两个正整 ...

  7. 寒假集训三(暴力枚举)2020.01.02(11题)

    寒假集训三(暴力枚举)id :521 Problem:A 二倍的问题 Description 给定2到15个不同的正整数,你的任务是计算这些数里面有多少个数对满足:数对中一个数是另一个数的两倍.比如给 ...

  8. 大一寒假培训(三)——暴力枚举及妙用

    大一寒假培训(三) 经过两天的培训之后,第三天也到来了.今天讲的是暴力枚举.好像没什么可讲的(悄咪咪地说) 接下来还是今天的练习 nefu 8 二倍的问题 Description 给定2到15个不同的 ...

  9. 447 回旋镖的数量(暴力枚举)

    1. 问题描述: 给定平面上 n 对互不相同的点 points ,其中 points[i] = [xi, yi] .回旋镖是由点 (i, j, k) 表示的元组 ,其中 i 和 j 之间的距离和 i  ...

最新文章

  1. sqlyog要先安装mysql_MySQL和SQLyog的配置-安装及遇到的问题
  2. 2008.02.05
  3. 计算机二级证书在学校哪里领取,计算机二级证书去哪里领取
  4. linux非阻塞的socket发送数据出现EAGAIN错误的处理方法
  5. 接雨水12 · Trapping Rain Water12
  6. 多个蓝牙缺陷可使攻击者假冒合法设备
  7. android各版本的sdk区别
  8. 《CCIE路由和交换认证考试指南(第5版) (第1卷)》——导读
  9. TextRank算法
  10. 设计模式 - (3)抽象工厂模式(创建型)
  11. 【Mac进销存管理软件】Daily Sales Pro Mac
  12. Python基础 day2
  13. 产品沉思录 #Vol.20200315:交易平台研究
  14. Python123 练习1
  15. 高性价比蓝牙耳机推荐,五款便宜又好用的真无线蓝牙耳机
  16. 正版饥荒搜不到服务器,饥荒正版无法刷出服务器问题的解决方法
  17. Golang 二叉树遍历
  18. Spring设置定时任务时,关于执行时间的规则设置
  19. MessageBox深入研究
  20. 算法将成为人工智能时代的“科技原力”

热门文章

  1. 逻辑综合工具DesignCompiler使用教程
  2. 如何访问另一台电脑的共享文件夹_如何远程控制另一台电脑
  3. python继承属性_Python中的属性继承问题
  4. uboot移植——DM9000的移植
  5. uboot源码——mmc驱动分析
  6. 链表创建为什么需要使用内存分配?
  7. appium+python自动化项目实战(二):项目工程结构
  8. mysqlslap详解--MySQL自带的性能压力测试工具(转)
  9. 采用存储复制方式同步数据,实现数据库安全升级
  10. 子矩阵(NOIP2014 普及组第四题)