题意

有 \(n\) 个不降的非负整数数组,每个数组可以不取或取一个前缀,总共要取 \(k\) 个元素,问取到的和最大多少。

题解

结论题,但是想到结论还不会。

首先,我们只会有一个数组没选完,其它要么全选要么不选。证明考虑假设两个数组都没选完,基于数组单调不降进行一些分类讨论会发现存在一些严格不劣的调整方法。

接下来,我们相当于指定一个数组不要选,然后对剩下做 01-背包,接下来只要枚举指定的数组选几个即可。然后这个是 \(\Theta(n^2k)\) 的,于是你寄了。

01 背包是经典 max-plus 卷积,合并两个背包需要 \(\Theta(k^2)\) 的时间,而加入一个物品需要 \(\Theta(k)\) 的时间,\(n, k\) 同阶,所以别去想依赖于合并背包的做法。首先你有一个想法,当你先后枚举某两个数组不选的时候,左边的数组左边的那些物品和右边的数组右边的那些物品被重复计算了,这是浪费时间的地方。于是考虑分个块,对于一个块,预处理加入从左端点一直到块左端点的所有物品,这部分总共加入了 \(\Theta(n\cdot\frac n B)\) 次,以及从右端点一直到块右端点的所有物品,这样你枚举块内的物品,每次只需要在预处理出的背包中加入 \(\Theta(B)\) 个物品。于是你得到了一个 \(\Theta(nk\sqrt n)\) 的做法。

考虑把上面的分块换成分治,变成每次加入右边所有物品,递归到左边;加入左边所有物品,递归到右边。这样时间 \(\Theta(nk\log n)\),空间 \(\Theta(k\log n)\)。

CF1442D Sum的更多相关文章

  1. CF1442D Sum (动态规划,线段树分治)

    ( 宋 体 字 看 起 来 真 舒 服 ) _{_{(宋体字看起来真舒服)}} (宋体字看起来真舒服)​​ 题 面 ( 洛 谷 翻 译 ) 题面_{_{(洛谷翻译)}} 题面(洛谷翻译)​​ 给定 n ...

  2. LeetCode - Two Sum

    Two Sum 題目連結 官網題目說明: 解法: 從給定的一組值內找出第一組兩數相加剛好等於給定的目標值,暴力解很簡單(只會這樣= =),兩個迴圈,只要找到相加的值就跳出. /// <summa ...

  3. Leetcode 笔记 113 - Path Sum II

    题目链接:Path Sum II | LeetCode OJ Given a binary tree and a sum, find all root-to-leaf paths where each ...

  4. Leetcode 笔记 112 - Path Sum

    题目链接:Path Sum | LeetCode OJ Given a binary tree and a sum, determine if the tree has a root-to-leaf ...

  5. POJ 2739. Sum of Consecutive Prime Numbers

    Sum of Consecutive Prime Numbers Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 20050 ...

  6. BZOJ 3944 Sum

    题目链接:Sum 嗯--不要在意--我发这篇博客只是为了保存一下杜教筛的板子的-- 你说你不会杜教筛?有一篇博客写的很好,看完应该就会了-- 这道题就是杜教筛板子题,也没什么好讲的-- 下面贴代码(不 ...

  7. [LeetCode] Path Sum III 二叉树的路径和之三

    You are given a binary tree in which each node contains an integer value. Find the number of paths t ...

  8. [LeetCode] Partition Equal Subset Sum 相同子集和分割

    Given a non-empty array containing only positive integers, find if the array can be partitioned into ...

  9. [LeetCode] Split Array Largest Sum 分割数组的最大值

    Given an array which consists of non-negative integers and an integer m, you can split the array int ...

  10. [LeetCode] Sum of Left Leaves 左子叶之和

    Find the sum of all left leaves in a given binary tree. Example: 3 / \ 9 20 / \ 15 7 There are two l ...

随机推荐

  1. 每日复习------main()方法以及对象的初始化顺序

    由于 Java 虚拟机需要调用类的 main()方法,所以该方法的访问权限必须是 public,又因为 Java 虚拟机在执行 main()方法时不必创建对象,所以该方法必须是 static 的,该方 ...

  2. Kubernetes 部署 MySQL 高可用读写分离

    Kubernetes 部署 MySQL 高可用读写分离 简介: 在有状态应用中,MySQL是我们最常见也是最常用的.本文我们将实战部署一个一组多从的MySQL集群. 一.配置准备 configMap ...

  3. CentOS 落幕,将于2021年底结束维护

    官方最新消息: 译文: CentOS项目的未来是CentOS Stream,明年,我们将把重点从重建Red Hat Enterprise Linux(RHEL)的CentOS Linux转移到Cent ...

  4. [Maven]Maven聚合工程

    一直对此问题好奇,正好有这兴致和时间,有必要了解一下. 所谓聚合项目,实际上就是对项目分模块. 互联网项目一般来说按照业务分(订单模块.VIP模块.支付模块.CMS模块-): 传统的软件项目,大多采用 ...

  5. Python多线程与GIL锁

    Python多线程与GIL锁 python多线程 Python的多线程编程可以在单个进程内创建多个线程来同时执行多个任务,从而提高程序的效率和性能.Python的多线程实现依赖于操作系统的线程调度器, ...

  6. 四月十五号java基础知识

    1.今天下午做了一个题感受很深,自己做题没有思路或者有点思路死磕也没有搞清楚,看起来很简单的问题,在我手里很难 做咯许久还是室友帮忙解决的,后面重新打一遍还是出问题,找他解决的,问了问他我自己的问题, ...

  7. 一文了解MySQL中的多版本并发控制

    作者:京东零售  李泽阳 最近在阅读<认知觉醒>这本书,里面有句话非常打动我:通过自己的语言,用最简单的话把一件事情讲清楚,最好让外行人也能听懂. 也许这就是大道至简,只是我们习惯了烦琐和 ...

  8. day90:luffy:基于vue+drf的路飞学城项目前端部署

    目录 1.域名备案 2.域名解析 3.设置安全组 4.部署架构图 5.一些准备工作 6.docker 7.把前端项目通过nginx容器来运行 后端部署传送门:基于vue+drf的路飞学城项目后端部署 ...

  9. Spring很常用的@Conditional注解的使用场景和源码解析

    你好,我是刘牌! 介绍 今天要分享的是Spring的注解@Conditional,@Conditional是一个条件注解,它的作用是判断Bean是否满足条件,如果满足条件,则将Bean注册进IOC中, ...

  10. 如何快速在手机中查看UDID,无需itunes、itools

      第一步:使用iPhone/iPad打开这个网页 http://www.appuploader.net/ 如果嫌麻烦也可以电脑打 http://www.appuploader.net/,之后会出现二 ...