首页 > 其他分享 >1.11--06:月度开销

1.11--06:月度开销

时间:2024-11-15 21:29:33浏览次数:1  
标签:开销 06 周期 1.11 -- SUM mid int 财政

月度开销

题目传送门

思路

给定连续N天的开销,需要将这些天分成M个财政周期,使得开销最多的财政周期的开销尽可能少。

首先,我们可以确定一个财政周期的长度l,即将N天平均分成M个财政周期。这样每个财政周期的长度就是N/M。

然后,我们需要计算每个财政周期中的开销总和。假设当前财政周期的起始位置为i,那么当前财政周期的开销总和就是从第i天开始的连续N/M天的开销之和,即SUM(i, i+N/M-1)。

接下来,我们需要找到开销总和最大的财政周期,即找到使得SUM(i, i+N/M-1)最大的i。

我们可以使用滑动窗口的思想来解决这个问题。首先,我们计算起始位置为0的财政周期的开销总和SUM(0, N/M-1)。然后,我们从左往右依次移动起始位置i,每次移动一个位置,将起始位置i-1的开销减去第i-1天的开销,再加上第i+N/M-1天的开销,即得到起始位置为i的财政周期的开销总和SUM(i, i+N/M-1)。我们将SUM(i, i+N/M-1)与原先的最大开销进行比较,如果大于最大开销,就更新最大开销。

最后,最大开销就是最大月度开销的最小值。

#include <bits/stdc++.h>
using namespace std;
#define N 100005 
int n, m, a[N];
bool check(int k) //在每个子段和小于等于k的情况下,最少的子段数量是否小于等于m
{//注意:a中的单独一个元素也可能大于k 
    int sum = 0, ct = 1;//sum:当前子段加和 ct:现在在看第几个子段 
    for(int i = 1; i <= n; ++i)
    {
        if(a[i] > k)//存在元素大于k, 
            return false;
        if(sum + a[i] <= k)
            sum += a[i];
        else    
        {
            ct++;//看下一子段 
            sum = a[i];//i作为下一子段的第一个元素 
        }
    }
    return ct <= m;    
}
int main()
{
    int tot = 0;//加和 
    cin >> n >> m;
    for(int i = 1; i <= n; ++i)
    {
        cin >> a[i];
        tot += a[i];
    }
    int l = 0, r = tot, mid;//子段和最大值不会大过所有数的加和 
    while(l < r)//二分答案求满足某一条件的最小值 
    {
        mid = (l + r) / 2;
        if(check(mid))
            r = mid;
        else
            l = mid + 1;
    }
    cout << l;
    return 0;
}

标签:开销,06,周期,1.11,--,SUM,mid,int,财政
From: https://www.cnblogs.com/yhy2013/p/18548690

相关文章

  • 20241115
    Talesofseafaring发现需要维护最短路为单数和双数的最短路,所以先跑个最短路,然后对于每个询问看d是单数还是双数,然后判断输出就行,注意到直接这么写然后对于每个询问再查的话空间会爆,所以就把询问记录下来对于每个点为起始跑最短路的时候直接更新答案就行。公路修建问题求最大......
  • qmake和cmake是啥呀
    QMake和CMake都是用于构建和管理软件项目的工具,特别是在C++项目中广泛使用。它们的主要目的是自动化构建过程,管理项目的编译、链接等操作。但它们之间有一些关键的差异,主要体现在使用的方式、支持的功能以及跨平台能力等方面。1.QMakeQMake是Qt框架的构建工具,通常用于开......
  • [笔记]Dijkstra算法正确性证明
    最近做了一些题,感觉对算法更深刻的理解是比套板子更深层次的,在这个层次上解决问题,思路会更加清晰。比如P5687[CSP-S2019江西]网格图(题解)这道题就是网格图的最小生成树,解法就建立在普通Kruskal的基础上,当时想了挺久也没想出来,看了题解才豁然开朗。所以各算法总是要回顾回顾的~......
  • 企业搭建帮助中心:提升服务效率与客户满意度的双重优势
    在当今快节奏的商业环境中,企业面临着日益增长客户服务需求。搭建一个有效的帮助中心,不仅能够提升服务效率,还能增强客户满意度,这对于企业的长期发展至关重要。本文将探讨企业搭建帮助中心的优势,并提供实用的策略。在构建企业帮助中心的过程中,HelpLook作为一个强大的知识管理工具,可......
  • 干货!搭建帮助中心的注意事项别错过!
    在当今数字化时代,企业与客户之间的交互日益频繁,一个高效、易用的帮助中心成为了企业提升客户满意度、增强品牌忠诚度的关键。搭建一个优质的帮助中心不仅能够快速响应客户需求,还能有效降低客服成本,提升整体运营效率。本文将为您详细解析搭建帮助中心时需要注意的关键事项,并特别推......
  • [Moectf2024 Xor(大嘘)]
    [Moectf2024Xor(大嘘)]进入主函数输入32长度的字节sub_401100(&v7);进行加密byte_404058是加密后的密文转dwordsub_401100的加密看似很简单,但其实是错的,动态调试后就会发现到return后会跳到别的函数,追到return处的汇编就会发现有花指令这里莫名其妙就retn了,nop掉对l......
  • 1018 Public Bike Management(多条最短路径,dijkstra+dfs+回溯)
     该题考查多条最短路径的计算,对比单条最短路,主要有两点不同:1.在dijkstra算法中记录每个结点的所有相同最短距离的前结点2.在dfs找多条最短路径时需要回溯状态拿到所有最短路径以后,我们根据题意去获取相应的结果即可1#include<bits/stdc++.h>2usingnamespacestd;......
  • [Moectf2024 ezMaze]
    去壳分析:迷宫分析10*a2-10:Y(a1-1)/8:X表示按字节处理迷宫迷宫以十六进制压缩,但迷宫是80*56的二进制迷宫dump下来保存,转二进制,用bin(maze[2:]).zfill(8)脚本(bfs):fromcollectionsimportdequemaze=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1......
  • 有理逼近AAA算法
    用于有理逼近的AAA算法TheAAAAlgorithmforRationalApproximation,YujiNakatsukasa,OlivierSète,andLloydN.Trefethen,SIAMJournalonScientificComputing201840:3,A1494-A1522,https://doi.org/10.1137/16M1106122一、算法用途AAA算法是有理逼近算法,同......
  • Hgame2023 Reverse
    Hgame2023[HGAME2023week1]testyourIDA用ida打开即可[HGAME2023week1]encode查壳32位windows加密函数将输入的字节转高位和低位进行加密,后与byte_403000进行比较解密脚本:这里采取了爆破enc=[8,6,7,6,1,6,13,6,5,6,11,7,5,6,14,6,3,6,15,6,......