• Complete Partition Of Array


    Complete Partition Of Array

    1.分成sum相等的k份

    k = 2 k=2 k=2,显然预处理 s = ∑ i = 1 n a i s=\sum_{i=1}^na_i s=i=1nai,然后扫一遍枚举分界点即可。

    k = 3 k=3 k=3,可以预处理后缀 b i = ∑ j = i n ( [ s u f j = a v g ] ) , a v g = s 3 b_i=\sum\limits_{j=i}^n([suf_j=avg]),avg=\dfrac{s}{3} bi=j=in([sufj=avg]),avg=3s

    然后枚举第一个分界点 i i i,求和即可。

    当然也可以使用双指针思路类似。

    k > 3 k>3 k>3,但不是很大时,可以考虑 d p dp dp

    d p ( i , j ) = d p ( i , j ) + d p ( k , j − 1 ) × [ s u m ( k + 1 , i ) = s u m ( 1 , i ) j ] , k < i dp(i,j)=dp(i,j)+dp(k,j-1)\times [sum(k+1,i)=\dfrac{sum(1,i)}{j}],kdp(i,j)=dp(i,j)+dp(k,j1)×[sum(k+1,i)=jsum(1,i)],k<i

    区间和可以预处理前缀和、差分计算。

    时间复杂度: O ( n k ) O(nk) O(nk)

    1.1 Bouns

    1 ≤ k ≤ n ≤ 1 0 5 1\le k \le n\le 10^5 1kn105 是否可解呢?


    2.分成k份的最大值最小

    同理可以dp。

    const int MAX_COUNT = 100;
    int state[MAX_COUNT][MAX_COUNT];
    int a[MAX_COUNT];
     
    int MinSum(int n,int m)
    {
        int i = 0, j = 0, k = 0, temp = 0, MaxInt;
        for (i = 1;i <=n;++i)
        {
            state[i][1] = state[i-1][1] + a[i];
        }
        for (j = 2;j <=m;++j)
        {
            for (i = j; i <= n;++i)
            {
                temp = 10000000;
                for (k = j;k<i;++k)
                {
                    MaxInt = max(state[i][1]-state[k][1],state[k][j-1]);
                    if (temp > MaxInt)
                    {
                        temp = MaxInt;
                    }
                }
                state[i][j] = temp;
            }
        }
        return state[n][m];
    }
    
    • 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
    • 28
    • 29

    也可以二分贪心,直接二分答案,然后贪心分组。

    可以看一下这一题:【uva 714】Copying Books

    传送门

    最小值最大也可以dp 和 二分贪心。

    见 leetcode 1231.Divide Chocolate


  • 相关阅读:
    优化改进YOLOv5算法之添加MS-Block模块,有效提升目标检测效果(超详细)
    日志门面技术
    李永乐六套卷复盘
    【数学建模】2018年数学建模国赛C题 问题一代码
    《算法系列》之 数组
    常用的无线充发射IC芯片
    Python安装配置apache-superset
    【SpringBoot】静态资源的访问
    低市值Pow赛道解析,探寻百倍潜力项目
    激活函数介绍
  • 原文地址:https://blog.csdn.net/weixin_45750972/article/details/126831746