AtCoder Beginner Contest 332 G. Not Too Many Balls(最大流转最小割 dp)

2023-12-18

题目

n(n<=500)种球,第i种有ai(0<=ai<=1e12)个球,

m(m<=5e5)个盒子,第j个能放bj(0<=bj<=1e12)个球

特别地,第j个盒子最多能放i*j个第i种球

求m个盒子能放的最多的球的总数

思路来源

官方题解

题解

显然是一个最大流模型,超级源点s到超级汇点的流量t,

由于最小割=最大流,可以考虑最后这个图,割完之后长什么样

比如左侧1、3记为集合P含于S,右侧点2记为集合Q含于S,

那么,记左侧集合非P含于T,右侧集合非Q含于T

那么,最小割的边集的构成,由三部分组成:

1. 超级源点s与集合非P之间的边,即左侧属于t的点,断开与s的边

2. 集合Q与超级汇点t之间的边,即右侧属于s的点,断开与t的边

3. 左侧集合P与右侧集合非Q之间的边,左侧属于s的点,右侧属于t的点,断开左右点之间的边

由于边是有向的,

所以无需断开左侧属于t的点和右侧属于s的点之间的边,

因为从上游流量就已经切断了

然后就是对官方题解的一些补充说明吧,

最小割的代价由三部分组成,

形如 cost=\sum f(i)+\sum u(i) \sum v(j) + \sum g(j)

所以枚举 k=\sum u(i) ,也就是左侧属于S集合的i之和,

这样可以通过dp,O(n^3)求得 \sum u(i)

也就是属于S集合i之和固定时,不属于S集合的Ai之和的最小值

而后面两坨,k固定时,答案之和j有关,

可以任意划分,将一部分划给S集合,另一部分划给T集合,

并且划给S集合的每个点贡献是j*k,划给T集合的每个点贡献是B[j],

使得这两部分之和最小,那么考虑某一个点,自然是哪个小划给哪边,

所以每个点贡献是min(j*k,B[j])

由j*k>B[j],解得k>=B[j]/j,所以枚举k的时候,每个点从S换到T的操作只会发生一次

记录一下这个翻转的时机,即可一边枚举k一边实现对贡献的统计,

这部分复杂度O(n^2+m)

总复杂度O(n^3+n^2+m)

代码

#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define per(i,a,b) for(int i=(a);i>=(b);--i)
typedef long long ll;
typedef double db;
typedef pair<ll,int> P;
#define fi first
#define se second
#define pb push_back
#define dbg(x) cerr<<(#x)<<":"<<x<<" ";
#define dbg2(x) cerr<<(#x)<<":"<<x<<endl;
#define SZ(a) (int)(a.size())
#define sci(a) scanf("%d",&(a))
#define scll(a) scanf("%lld",&(a))
#define pt(a) printf("%d",a);
#define pte(a) printf("%d\n",a)
#define ptlle(a) printf("%lld\n",a)
#define debug(...) fprintf(stderr, __VA_ARGS__)
const int N=505,M=5e5+10,S=N*(N+1)/2;
const ll INF=0x3f3f3f3f3f3f3f3fll;
int n,m;
ll a[N],b[M],dp[N][S],ans,sum,sum2;
vector<int>flip[S];
void upd(ll &x,ll y){
    x=min(x,y);
}
int main(){
    sci(n),sci(m);
    rep(i,1,n)scll(a[i]);
    rep(i,1,m)scll(b[i]);
    memset(dp,INF,sizeof dp);
    dp[0][0]=0;
    rep(i,0,n-1){
        int up=i*(i+1)/2,v=i+1;
        rep(j,0,up){
            upd(dp[i+1][j+v],dp[i][j]);
            upd(dp[i+1][j],dp[i][j]+a[i+1]);
        }
    }
    int lim=n*(n+1)/2;
    rep(j,1,m){//先认为都是j*k,再翻到b[j]
        ll v=b[j]/j;
        if(v<=lim)flip[v].pb(j);
        sum+=j;
    }
    ans=8e18;
    rep(j,0,lim){
        ans=min(ans,dp[n][j]+1ll*sum*j+sum2);
        for(auto &v:flip[j]){
            sum-=v;
            sum2+=b[v];
        }
    }
    printf("%lld\n",ans);
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AtCoder Beginner Contest 332 G. Not Too Many Balls(最大流转最小割 dp) 的相关文章

  • 1124:成语接龙 dfs+一维数组保存结果

    题目描述 小明在玩成语接龙的游戏 成语接龙的规则是 如果成语A的最后一个汉字与成语B的第一个汉字相同 那么成语B就可以接到成语A的后面 小明现在手上有一本成语词典 每次他都得花费一定时间来从当前的成语查到下一个可以接在后面的成语 现在给你一
  • 形象讲解Android中dpi,dp和px之间的关系(设计师如何与程序员沟通)

    屏幕尺寸指屏幕 显示屏 对角线的长度 单位为英寸 dpi dots per inch 像素密度 指每英寸中的像素数 1 在android中 160dpi设备下 1px 1dp 160dpi表示一英寸中包含160个像素点 px 即把一英寸平均
  • poj 2096 Collecting Bugs

    Problem poj org problem id 2096 vjudge net contest 151678 problem Q Reference blog csdn net xingyeyongheng article detai
  • 【BZOJ 4069】 [Apio2015]巴厘岛的雕塑

    4069 apio2015 巴厘岛的雕塑 Time limit 1000 ms Memory limit 65536 KB Description The province of Bali has many sculptures locat
  • 最长01交替子串(浪潮笔试题)

    题意 给一个只有0和1的字符串 允许反转一个连续区间 即0变成1 1变成0 求最长的01交替串多长 允许不连续 我最先想到的是动态规划解法 状态设计方面 首先一个串的状态会有以0结尾和以1结尾两种 然后题目中说允许反转一个连续区间 那么根据
  • hdu 1074 Doing Homework

    Problem acm hdu edu cn showproblem php pid 1074 题意 n 份作业 分别给出名字 完成所需时间 cost 最迟上交时间 deadline 作业每迟交一天扣一分 问最少的扣分数 Analysis
  • 入门级动态规划:2018年第九届蓝桥杯省赛B组第四题—测试次数( 摔手机 )

    目录 下面列出用动态规划如何解决此问题 计算若干层楼用若干部手机最少需要摔多少次 计算用若干部手机摔若干次最多可以确定多少层楼 原题描述 x星球的居民脾气不太好 但好在他们生气的时候唯一的异常举动是 摔手机 各大厂商也就纷纷推出各种耐摔型手
  • 某企业每月给其A、B、C 和D 四个门店一共发送6 个集装箱的某种货物,如果各门店出售该种货物的利润(万元)如下表:

    某企业每月给其A B C 和D 四个门店一共发送6 个集装箱的某种货物 如果各门店出售该种货物的利润 万元 如下表 试求这6 箱货物如何分配给各门店 才能获得最大总利润 解题思路 将问题按卖场分为四个阶段 将A B C D四个卖场分别编号为
  • linux--shell错误:syntax error near unexpected token ‘('

    这几天编写了几个简单的shell程序 然后都出现了syntax error near unexpected token 的错误 然后实在是检查不出错误 后面百度了才找到的原因 之前错误的程序片段如下 usr whoami dr pwd 提示
  • hdu 4405 Aeroplane chess

    Problem acm hdu edu cn showproblem php pid 4405 vjudge net contest 151678 problem R Reference bbs csdn net topics 380193
  • 砝码称重问题【dp】

    设有 1g 2g 3g 5g 10g 20g 的砝码各若干枚 其 总重 1000g 要 求 输入 a1 a2 a3 a4 a5 a6 表示 1g 砝码有 a1 个 2g 砝码有 a2 个 20g 砝码有 a6 个 输出 Total N N
  • 骰子【概率dp】

    题目链接 P1409 骰子 因为会有人被弹出队列 所以我设置的期望dp为 表示当现在队列中有i个人的时候 第j个人获胜的概率 于是有当只剩一个人的时候 那个人必胜 再往下 先看它在队首的情况 也就是直接获胜的概率加上它被弹到队尾时候的概率
  • PowerOJ 2543: 赛场布置

    题目链接 对于每个点 它可以选择男或者女 如果要加上的贡献 那么相邻的一定得是异性才可以 所以 对相邻的 我们可以考虑成 然后 我们对于点坐标的的奇偶性分别讨论即可 当然 还需要考虑的贡献 然后就是全选减去最少割去的即可 include
  • GYM 102059 G Fascination Street

    G Fascination Street 参考 给出一串n 2e5 个灯 每个灯点亮可以照到相邻三个位置 每个灯点亮都有不同的花费 现在可以交换k 9 次灯的位置 求把所有n个位置都照到的最小花费 交换的肯定是一个亮的灯和一个灭的灯 不然是
  • 递归、加法原理,如何分解问题(独立且完备的划分)

    加法原理适用于做一件事有n种独立不相交且完备的方向 每个方向上有ai种方案 则总的方案数就是 a1 a2 an 例题 把n个数分为k个非空子集 有多少种分法 分解问题 第一个集合里放多少个数把原问题的解分成了独立且完备的若干方向 分别解每个
  • Palindrome subsequence【区间DP+冗斥】

    题目链接HDU 4632 题目让我们求给定的一段字符串上回文串的长度 一个数也算是回文串 于是我就想怎样去找其中的规律 我举了些例子 先是从相同的字符串开始举例 aaa 对于aaa dp 1 1 1 dp 2 2 1 dp 1 2 dp 1
  • 备战2023蓝桥国赛-传纸条

    题目描述 解析 这道题想了我好久 一开始我是想假如只走一条路线 从 1 1 走到 m n 这种问题该怎么解决呢 针对这种问题我是设了dp k i j 表示走了k步到达 i j 的好心程度之和的最大值 然后根据这个来写出转移方程来计算 后面就
  • Thief in a Shop 【CodeForces - 632E】【背包】

    题目链接 给了N个物品 每个物品无限个 我们要的是求刚好我们拿了K个物品的时候 能组成哪几种数 我们可以想个办法去填充 那么就需要有一个所谓的0状态 然后假如不足K个的时候 就可以拿这个所谓的0状态来填充了 所以 我们把所有的数排序 然后都
  • 【DP】拔河比赛

    题目 一个学校举行拔河比赛 所有的人被分成了两组 每个人必须 且只能够 在其中的一组 要求两个组的人数相差不能超过1 且两个组内的所有人体重加起来尽可能地接近 输入 输入数据的第1行是一个n 表示参加拔河比赛的总人数 n lt 100 接下
  • UVa 1347 Tour

    题目 Tour 题意 来自luogu John Doe想用最小的路程游览完所有目的地 每个目的地都用坐标xi yi表示 任何两目的地的xi都不相同 两目的地之间的路程是两点之间的直线距离 John是这样走的 他从最左边的点开始 然后只能向右

随机推荐

  • 实现元素的淡入淡出效果

    jQuery Fading方法 通过jQuery 您可以实现元素的淡入淡出效果 jQuery拥有下面四种fade方法 fadeIn fadeOut fadeToggle fadeTo jQuery fadeIn 方法 jQuery fade
  • Macleod中双面镀膜的模拟

    传统意义上 Essential Macleod的设计是由一系列完全干涉的薄膜组成 并只在基板的一侧形成膜层 而Stack是由一组膜层和基板组成 基板的两个面是平行的 以便在相同材料中传播角度相同 Stack中 膜层被介质 或基底 分开 介质
  • 如何利用CHAT分析问题?

    问CHAT 项目能够顺利完成的因素有哪些 CHAT回复 1 明确的目标 项目需要有一个明确的目标 这样才能为团队提供一个清晰的方向 2 计划和组织 一个成功的项目必须经过详细的计划和组织 以确保所有的任务都能在预定的时间内完成 3 资源分配
  • mp3音频剪辑软件哪个好?把你的音乐剪出新意

    在一个阳光明媚的午后 你坐在咖啡馆的角落 听着轻快的爵士乐 突然间 一首熟悉的旋律在你的脑海中回荡 你决定要把这段旋律剪辑下来 留作纪念 那么 电脑如何剪辑音频呢 这就需要用到音频剪辑软件了 今天就为大家推荐三款非常实用的软件 如果你正好需
  • 干货下载丨不分业态、不关注核心需求,怎么做得好项目管理?!

    项目管理 装备制造业的破局利刃 对于装备制造行业而言 每一笔订单都是 非标定制 小批量制造 这种特性决定了其行业企业普遍存在 新品开发周期长 生产效率低 质量不稳定 交货期不稳定 成本预算难控制 非标品报价慢 等问题 如何提升企业的管理水平
  • 智能机器人:未来与现实的交汇

    导言 人工智能智能机器人是当今科技领域的璀璨明珠 将技术 感知和智能相结合 呈现出前所未有的发展态势 人工智能助力的智能机器人代表了科技融合的巅峰 其强大的感知 学习和决策能力正深刻改变着我们的生活 本文将深入探讨人工智能智能机器人的定义
  • 网信办新规“1小时上报”,赛宁网安积极响应!

    12月8日 国家互联网信息办公室起草发布了 网络安全事件报告管理办法 征求意见稿 以下简称 办法 办法 明确规定了运营者在发生网络安全事件时 应当及时启动应急预案进行处置 属于较大 重大或特别重大网络安全事件的 应当于1小时内进行报告 办法
  • 【Linux】进程周边005之环境变量

    樊梓慕 个人主页 个人专栏 C语言 数据结构 蓝桥杯试题 LeetCode刷题笔记 实训项目 C Linux 每一个不曾起舞的日子 都是对生命的辜负 目录 前言 1 环境变量是什么 1 1查看环境变量的方法
  • 通过Python运算符来了解基本操作和语法规则

    Python运算符是一种用于执行特定操作的符号 它们可以用于执行各种数学运算 比如加法 减法 乘法和除法 在Python中 有几种不同类型的运算符 包括算术运算符 比较运算符 逻辑运算符 位运算符和赋值运算符 每种运算符都有其特定的用途和语
  • oracle数据库密码有限期查询

    SELECT FROM dba profiles WHERE resource name PASSWORD LIFE TIME oracle数据库密码有限期修改为 无限期 ALTER PROFILE DEFAULT LIMIT PASSWO
  • 扬帆证券:证券约定购回是什么?包括哪些基本要素?

    证券约好购回是什么 证券约好购回是指投资者按约好价格向券商卖出标的证券 并约好好在未来的某一时期按照另一约好价格从券商手中买回该标的证券的生意行为 该生意目的是为了帮助投资者的进行短期的资金融通 证券约好购回包括了初始生意和购回生意共两次生
  • equals()和hashcode() 方法的区别

    equals和hashCode方法主要的区别在于 性能 可靠性 对于需要大量并且快速对比 如果都用equals比较效率太低 所以每当需要对象比较时 先用hashCode对比 如果hashCode值不一样 两对象肯定不相等 也就没必要再用eq
  • jQuery 动画 - animate() 方法

    jQuery animate 方法用于创建自定义动画 语法 selector animate params speed callback 必需的params参数定义形成动画的CSS属性 可选的speed参数规定效果的时长 它可以取以下值 s
  • 题解 | #平均活跃天数和月活人数#

    金融科技岗分享 欢聚shopline 凉 又遇毁到offer 爱奇艺互动产品运营实习面经 百度大搜2024校招补录 搜索时效性团队工作职责 1 通过query理解 召回 排序全链路的优化 持续优化百度搜索时效排序效果2 持续探索落地最前沿的
  • SQL使用WITH ROLLUP子句计算每个分组的合计值

    先来看一个示例的SQL查询语句 假设我们有一个名为t sales的表 记录了销售订单的信息 包括订单日期 销售额等字段 我们想要按照订单日期进行分组 并计算每天的销售总额和总订单数 同时还希望得到整体的销售总额和订单数 SELECT IFN
  • 扬帆证券:长线资金积极涌入 新能源汽车产业链获青睐

    近日 广汽集团与中国银行 广州工业出资控股集团有限公司举行了战略协作签约仪式 三方将作为有限合伙人按33 4 33 3 33 3 的份额认缴出资 建议建立广州新祺智联股权出资基金 据悉 该基金总规划为300亿元 首期规划为100亿元 由广汽
  • jQuery - 获取内容和属性

    jQuery拥有可操作HTML元素和属性的强大方法 jQuery DOM操作 jQuery中非常重要的部分 就是操作DOM的能力 jQuery提供一系列与DOM相关的方法 这使访问和操作元素和属性变得很容易 lamp DOM Documen
  • Andriod:andriod手机屏幕坐标系

    如图所示 左上角为坐标原点 越向下 y值越大 越向右 x值越大
  • 玩转 TableAgent 数据智能分析

    一 什么是数据智能分析 数据智能分析 是指利用先进的技术和工具对 大量数据 进行收集 整理 分析和挖掘 以获取有益的信息和见解 这种分析通常涉及 人工智能 机器学习 数据挖掘和统计分析 等技术 旨在揭示数据背后隐藏的模式 关联和趋势 以帮助
  • AtCoder Beginner Contest 332 G. Not Too Many Balls(最大流转最小割 dp)

    题目 n n lt 500 种球 第i种有ai 0 lt ai lt 1e12 个球 m m lt 5e5 个盒子 第j个能放bj 0 lt bj lt 1e12 个球 特别地 第j个盒子最多能放i j个第i种球 求m个盒子能放的最多的球的