当前位置: 首页 > news >正文

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}],k<i dp(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];
}

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

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

传送门

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

见 leetcode 1231.Divide Chocolate


相关文章:

  • 单节点k8s—自签名证书—四层负载均衡—helm安装rancher
  • 高频面试题:谈谈你对 Spring Boot 自动装配机制的理解
  • Apple Xcode 14 (14A309) 正式版发布(含下载)
  • mysql 执行计划 type详解
  • Java进阶篇之泛型
  • 发送post请求渲染el-table,并实现搜索和分页功能
  • [RK3568 Android11] 时间同步机制
  • 6、Mybatis-Plus wrapper的使用
  • 基于Web的爬虫系统设计与实现
  • Kubernets---配置 Pod 使用投射卷作存储
  • springcloud和分布式微服务学习笔记
  • 【“在路上”疫情信息检测】
  • `算法知识` 模意义下的乘法逆元
  • 微信小程序 | 游戏开发之接宝石箱子游戏
  • 丙烯酰氧乙基三甲基氯化铵(DAC)接枝聚苯乙烯伯胺微球微粒/聚苯乙烯包覆硅胶复合微球
  • 0x05 Python数据分析,Anaconda八斩刀
  • httpie使用详解
  • Js基础知识(四) - js运行原理与机制
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • Map集合、散列表、红黑树介绍
  • React+TypeScript入门
  • Twitter赢在开放,三年创造奇迹
  • 前端学习笔记之观察者模式
  • 如何编写一个可升级的智能合约
  • 微信小程序设置上一页数据
  • 硬币翻转问题,区间操作
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • mysql面试题分组并合并列
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • 组复制官方翻译九、Group Replication Technical Details
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • "无招胜有招"nbsp;史上最全的互…
  • #QT(串口助手-界面)
  • $(selector).each()和$.each()的区别
  • (¥1011)-(一千零一拾一元整)输出
  • (c语言)strcpy函数用法
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (十)T检验-第一部分
  • (已解决)Bootstrap精美弹出框模态框modal,实现js向modal传递数据
  • (转)fock函数详解
  • .net core 6 redis操作类
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET gRPC 和RESTful简单对比
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .net 流——流的类型体系简单介绍
  • .net 怎么循环得到数组里的值_关于js数组
  • .net和php怎么连接,php和apache之间如何连接
  • .net中我喜欢的两种验证码
  • /3GB和/USERVA开关
  • @ModelAttribute 注解
  • [20160902]rm -rf的惨案.txt
  • [C/C++] C/C++中数字与字符串之间的转换
  • [C++] Boost智能指针——boost::scoped_ptr(使用及原理分析)
  • [Grafana]ES数据源Alert告警发送