LeetCode LCP 33. 蓄水(暴力枚举)
文章目录
- 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. 蓄水(暴力枚举)相关推荐
- ⭐算法入门⭐《二分枚举》简单15 —— LeetCode LCP 18. 早餐组合
文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 2.时间复杂度 3.代码详解 三.本题小知识 四.加群须知 一.题目 1.题目描述 小扣在秋日市集选择了一 ...
- LeetCode LCP 51. 烹饪料理(状态枚举)
文章目录 1. 题目 2. 解题 1. 题目 欢迎各位勇者来到力扣城,城内设有烹饪锅供勇者制作料理,为自己恢复状态. 勇者背包内共有编号为 0 ~ 4 的五种食材,其中 meterials[j] 表示 ...
- 最大字段和 冲出暴力枚举
这篇解题报告是对我最近一些题的总结,里面的代码都是我解题,优化,再优化的过程的记录,记录了自己对算法的完善与优化思路,还有对编程哲学的理解:do it,do it well. 很感谢孙老师您,让自己可 ...
- LeetCode 672. 灯泡开关 Ⅱ(枚举)
1. 题目 现有一个房间,墙上挂有 n 只已经打开的灯泡和 4 个按钮. 在进行了 m 次未知操作后,你需要返回这 n 只灯泡可能有多少种不同的状态. 假设这 n 只灯泡被编号为 [1, 2, 3 - ...
- 2014牡丹江网络赛ZOJPretty Poem(暴力枚举)
/* 将给定的一个字符串分解成ABABA 或者 ABABCAB的形式! 思路:暴力枚举A, B, C串! */ 1 #include<iostream> 2 #include<cst ...
- 新手入门刷题(专题三)暴力枚举
新手入门刷题(专题三)暴力枚举--->持续更新 4.14 统计方形(数据加强版) 题目描述 有一个 n×m 方格的棋盘,求其方格包含多少正方形.长方形(不包含正方形). 输入格式 一行,两个正整 ...
- 寒假集训三(暴力枚举)2020.01.02(11题)
寒假集训三(暴力枚举)id :521 Problem:A 二倍的问题 Description 给定2到15个不同的正整数,你的任务是计算这些数里面有多少个数对满足:数对中一个数是另一个数的两倍.比如给 ...
- 大一寒假培训(三)——暴力枚举及妙用
大一寒假培训(三) 经过两天的培训之后,第三天也到来了.今天讲的是暴力枚举.好像没什么可讲的(悄咪咪地说) 接下来还是今天的练习 nefu 8 二倍的问题 Description 给定2到15个不同的 ...
- 447 回旋镖的数量(暴力枚举)
1. 问题描述: 给定平面上 n 对互不相同的点 points ,其中 points[i] = [xi, yi] .回旋镖是由点 (i, j, k) 表示的元组 ,其中 i 和 j 之间的距离和 i ...
最新文章
- sqlyog要先安装mysql_MySQL和SQLyog的配置-安装及遇到的问题
- 2008.02.05
- 计算机二级证书在学校哪里领取,计算机二级证书去哪里领取
- linux非阻塞的socket发送数据出现EAGAIN错误的处理方法
- 接雨水12 · Trapping Rain Water12
- 多个蓝牙缺陷可使攻击者假冒合法设备
- android各版本的sdk区别
- 《CCIE路由和交换认证考试指南(第5版) (第1卷)》——导读
- TextRank算法
- 设计模式 - (3)抽象工厂模式(创建型)
- 【Mac进销存管理软件】Daily Sales Pro Mac
- Python基础 day2
- 产品沉思录 #Vol.20200315:交易平台研究
- Python123 练习1
- 高性价比蓝牙耳机推荐,五款便宜又好用的真无线蓝牙耳机
- 正版饥荒搜不到服务器,饥荒正版无法刷出服务器问题的解决方法
- Golang 二叉树遍历
- Spring设置定时任务时,关于执行时间的规则设置
- MessageBox深入研究
- 算法将成为人工智能时代的“科技原力”