Blage's Coding Blage's Coding
Home
算法
  • 手写Spring
  • SSM
  • SpringBoot
  • JavaWeb
  • JAVA基础
  • 容器
  • Netty

    • IO模型
    • Netty初级
    • Netty原理
  • JVM
  • JUC
  • Redis基础
  • 源码分析
  • 实战应用
  • 单机缓存
  • MySQL

    • 基础部分
    • 实战与处理方案
    • 面试
  • ORM框架

    • Mybatis
    • Mybatis_Plus
  • SpringCloudAlibaba
  • MQ消息队列
  • Nginx
  • Elasticsearch
  • Gateway
  • Xxl-job
  • Feign
  • Eureka
  • 面试
  • 工具
  • 项目
  • 关于
🌏本站
🧸GitHub (opens new window)
Home
算法
  • 手写Spring
  • SSM
  • SpringBoot
  • JavaWeb
  • JAVA基础
  • 容器
  • Netty

    • IO模型
    • Netty初级
    • Netty原理
  • JVM
  • JUC
  • Redis基础
  • 源码分析
  • 实战应用
  • 单机缓存
  • MySQL

    • 基础部分
    • 实战与处理方案
    • 面试
  • ORM框架

    • Mybatis
    • Mybatis_Plus
  • SpringCloudAlibaba
  • MQ消息队列
  • Nginx
  • Elasticsearch
  • Gateway
  • Xxl-job
  • Feign
  • Eureka
  • 面试
  • 工具
  • 项目
  • 关于
🌏本站
🧸GitHub (opens new window)
  • 数组

  • 链表

  • 字符串

  • 二叉树

  • 动态规划

  • 深搜回溯

  • 数学贪心

    • LCP 33. 蓄水
    • 6455. 使所有字符相等的最小成本
    • 55. 跳跃游戏
    • 2517. 礼盒的最大甜蜜度
    • 2611. 老鼠和奶酪
    • 6449. 收集巧克力
    • 1401. 圆和矩形是否有重叠
    • 2178. 拆分成最多数目的正偶数之和
    • 376. 摆动序列
    • 649. Dota2 参议院
    • 630. 课程表 III
    • 2136. 全部开花的最早一天
    • 2731. 移动机器人
  • 堆栈队列

  • 前缀和

  • 算法设计

  • 位运算

  • WA

  • 算法
  • 数学贪心
phan
2023-05-21

LCP 33. 蓄水

# LCP 33. 蓄水

解题思路:想不到一个数的加法与商的最低操作数时,那么就直接贪心,遍历枚举所有的可能次数。

如果得知蓄水总操作数量k,那么总的操作数可以按如下计算得出:

①蓄水次数 i —>②每个水桶所需要达到的蓄水容量—>③升级每个水桶容量所需要的升级次数

而这个蓄水次数,可能会跟单个桶的最优蓄水次数数学问题有关,又可能受到多个桶最优次数限制,因此最直接的方式就是贪心法枚举,该蓄水次数 i 通过两个约束限制其大小:

  • i 不会超过初始状态下每个桶的蓄水次数的最大值。因为后续还会升级水桶容量,所以蓄水次数只会比初始状态下的次数更小。(需要考虑水桶和水缸初始容量为0情况)
  • i 蓄水次数不会超过当前枚举过程中,得到的每个总操作数结果。即 i '<i + upstep。
class Solution {
    public int storeWater(int[] bucket, int[] vat) {
        int maxStep=0;
        for(int i=0;i<bucket.length;i++){
            if(vat[i]==0) continue;
            if(bucket[i]==0){
                maxStep=vat[i]>maxStep?vat[i]:maxStep;
                continue;
            }
            int temp=vat[i]%bucket[i]==0?vat[i]/bucket[i]:vat[i]/bucket[i]+1;
            maxStep=temp>maxStep?temp:maxStep;
        }
        if(maxStep==0) return 0;
        int ans=Integer.MAX_VALUE;
        for(int i=1;i<=maxStep&&i<ans;i++){
            int up=0;
            for(int j=0;j<bucket.length;j++){
                int container=vat[j]%i==0?vat[j]/i:vat[j]/i+1;
                int uptemp=container<bucket[j]?0:container-bucket[j];
                up+=uptemp;
            }
            int sum=up+i;
            ans=sum<ans?sum:ans;
        }
        return ans;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
编辑 (opens new window)
#Leetcode
上次更新: 2023/12/15, 15:49:57
剑指offer38
6455. 使所有字符相等的最小成本

← 剑指offer38 6455. 使所有字符相等的最小成本→

Theme by Vdoing | Copyright © 2023-2024 blageCoder
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式