贪心:交换论证法

目录

切蛋糕的最小总开销

切蛋糕的最小总开销

交换论证:

设横切的开销为 h,如果先横切,设需要横切 cnt_h 次。

设竖切的开销为 v,如果先竖切,设需要竖切 cnt_v 次。

先横切,再竖切,那么竖切的次数(这一刀经过的蛋糕块数)要多 1,开销为
h⋅cnt_h+v⋅(cnt_v+1)
先竖切,再横切,那么横切的次数(这一刀经过的蛋糕块数)要多 1,开销为
v⋅cnt_v+h⋅(cnt_h+1)
如果先横再竖开销更小,则有

h⋅cnt_h+v⋅(cnt_v+1)<v⋅cnt_v+h⋅(cnt_h+1)
化简得

h>v
这意味着,谁的开销更大,就先切谁。

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

/*
1. 最小总开销=一堆横切竖切开销的和
2. 非一切到底的开销=一切到底的开销
3. cnt_h表示横切次数,cnt_v表示竖切次数
4. 竖切横切,谁的开销大,就先切谁
*/

class Solution {
public:
    long long minimumCost(int m, int n, vector<int>& horizontalCut, vector<int>& verticalCut) {
        long long res=0;
        sort(horizontalCut.begin(),horizontalCut.end(),greater<>());//开销大的在前
        sort(verticalCut.begin(),verticalCut.end(),greater<>());
        int cnt_h=1;//横切次数
        int cnt_v=1;//竖切次数
        int i=0,j=0;
        while(i<m-1||j<n-1){
            if(j==n-1||i<m-1&&horizontalCut[i]>verticalCut[j]){//竖切全部完成或横切开销大于竖切开销
                res+=horizontalCut[i]*cnt_v;//横切
                cnt_h++;
                i++;
            }
            else{
                res+=verticalCut[j]*cnt_h;
                cnt_v++;
                j++;
            }
        }
        return res;
    }
};

相关推荐

  1. 贪心中关于重叠区间问题的感悟

    2024-07-15 08:40:03       48 阅读
  2. 贪心中常见的使用方法逻辑整理

    2024-07-15 08:40:03       33 阅读
  3. 贪心、Dijkstra和A*类路径搜索算法

    2024-07-15 08:40:03       30 阅读
  4. 算法设计与分析复习(第7章 贪心

    2024-07-15 08:40:03       18 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-15 08:40:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-15 08:40:03       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-15 08:40:03       58 阅读
  4. Python语言-面向对象

    2024-07-15 08:40:03       69 阅读

热门阅读

  1. 【随手记】python大规模数据读取

    2024-07-15 08:40:03       27 阅读
  2. django之 annotate,aggrate

    2024-07-15 08:40:03       24 阅读
  3. Linux shell自动交互之expect实践案例

    2024-07-15 08:40:03       22 阅读
  4. 代码改进,深度学习,强化学习

    2024-07-15 08:40:03       18 阅读
  5. Macos R安装xlsx ld: library not found for -lpcre2-8

    2024-07-15 08:40:03       20 阅读
  6. GitHub备份代码的学习笔记

    2024-07-15 08:40:03       24 阅读
  7. UF_add_callback_function

    2024-07-15 08:40:03       26 阅读
  8. 根服务器上市公司概览

    2024-07-15 08:40:03       24 阅读
  9. 【Go】如何使用 Go 连接 MySQL 数据库

    2024-07-15 08:40:03       20 阅读
  10. 职场新人感受

    2024-07-15 08:40:03       22 阅读