洛谷 [P2765] 魔术球问题】的更多相关文章

P2765 魔术球问题 题目描述 问题描述: 假设有\(n\)根柱子,现要按下述规则在这\(n\)根柱子中依次放入编号为\(1,2,3,\dots\)的球. \((1)\) 每次只能在某根柱子的最上面放球. \((2)\) 在同一根柱子中,任何\(2\)个相邻球的编号之和为完全平方数. 试设计一个算法,计算出在\(n\)根柱子上最多能放多少个球.例如,在 \(4\) 根柱子上最多可放 \(11\) 个球. 编程任务: 对于给定的\(n\),计算在\(n\)根柱子上最多能放多少个球. 输入输出格式…
P2765 魔术球问题 题目描述 «问题描述: 假设有n根柱子,现要按下述规则在这n根柱子中依次放入编号为1,2,3,...的球. (1)每次只能在某根柱子的最上面放球. (2)在同一根柱子中,任何2个相邻球的编号之和为完全平方数. 试设计一个算法,计算出在n根柱子上最多能放多少个球.例如,在4 根柱子上最多可放11 个球. «编程任务: 对于给定的n,计算在n根柱子上最多能放多少个球. 输入格式 第1 行有1个正整数n,表示柱子数. 输出格式 程序运行结束时,将n 根柱子上最多能放的球数以及相…
https://www.luogu.org/problemnew/show/P2765 看到这一题第一眼想到:这不是二分最大流吗,后来发现还有一种更快的方法. 首先如果知道要放多少个球求最少的柱子,很显然是一道最小点路径覆盖的题,将一个点拆成u,v两个点,u和S相连,v和T相连,之后的有向边i,就用ui和vj相连即可. 但是这题首先不知道有多少个球,所以考虑依次加入点以及和这个点相关的边,然后在残余网络上跑新的最大流,如果可以跑出流量来意味着这个点成功在现有的柱子上按排上了,如果跑不出来说明按排…
贪心做法 每次尽可能选择已经放过球的柱子 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using namespace std; int num[100][1000],n; bool chk(const int &a,const int &b){ int t=sqrt(a+b); retu…
传送门 %%%KSkun大佬 话说明明是网络流……这题竟然还有打表找规律和纯贪心AC的……都是神犇啊…… 来说一下如何建图.首先把每一个点拆成$X_i$和$Y_i$,然后$S$向$X_i$连一条容量为$1$的边,$Y_i$向$T$连一条容量为$1$的边.对于能和它组成完全平方数的点,从$A_j$向$B_i$连一条容量为$1$的边 然后考虑一下,加球不会导致柱子减少,所以可以枚举球数,然后每次加一个球,并跑一次最大流.如果新加入的球是能加到某一个柱子中的,那么这一次跑最大流是能得到新流的,只要能一…
题意 已经很简洁了吧. 假设有n根柱子,现要按下述规则在这n根柱子中依次放入编号为1,2,3,...的球. (1)每次只能在某根柱子的最上面放球. (2)在同一根柱子中,任何2个相邻球的编号之和为完全平方数. 试设计一个算法,计算出在n根柱子上最多能放多少个球 Sol 这题有两种做法 1:贪心,能放就放 2:网络流 首先考虑到每个元素只能用因此,拆为$a_i$,$b_i$ 从$S$向$a_i$连权值为$1$的边,从$b_i$向$T$连权值为$1$的边 依次枚举加入的每一个数,每次跑最大流,若更优…
题目链接:https://www.luogu.org/problemnew/show/P2765 知识点: 最大流 解题思路: 本题所有边的容量均为 \(1\). 从 \(1\) 开始加入数字,将这个数拆成两个点:\(P_1\) 连源点,\(P_2\) 连汇点,然后枚举所有比它小并且与它加起来是完全平方数的正整数 \(Num\) ,从 \(Num\) 的 \(P_1\) 连一条边到目前要加入的数字的 \(P_2\). 建完边后在之前的残量网络的基础上跑 \(Dinic\),如果没有新的流量通过,…
P2765 魔术球问题 贪心模拟就可以过.........好像和dinic没啥关系   找找规律发现可以贪心放.n又灰常小. 设答案=m 你可以$O(mn)$直接模拟过去 闲的慌得话可以像我用个$set$维护 复杂度可以降为$O(mlogn)$ 网络流.....不会写(逃   口胡一下dinic 一个点$u$拆成2个表示 1.放在柱子最下面,与S连接(u) 2.满足和下面的数的和为完全平方数,与T连接(u') 满足关系的两个点u.v,建立v-u' 当一个点被加入后,它就相当于放在最下面的点了.…
P2765 魔术球问题 知识点::最小点覆盖 这个题目要拆点,这个不是因为每一个球只能用一次,而是因为我们要求最小点覆盖,所以要拆点来写. 思路: 首先拆点,然后就是开始建边,因为建边的条件是要求他们可以组成一个平方数,这个平方数最大就是x*x,最小就是x  大致就是这样, 所以去遍历然后建边,最后每次就跑残余网络,如果最大流增加了,就说明这个可以和之前的建边,否则就说明不可以,就要给它一个新柱子. 路径输出一般就是两个数组,一个tag,一个to 我的这份代码写的好搓. #include <cs…
洛谷题目链接:看球泡妹子 题目背景 2014年巴西世界杯开幕了,现在满城皆是世界杯,商家们利用它大赚一笔,小明和小红也借此机会增进感情. 题目描述 本届世界杯共有N支球队,M场比赛.男球迷小明喜欢看比赛,女球迷小红喜欢看帅哥.每支球队在小明眼里的实力值为Ai,在小红眼里的帅哥数量为Bi. 每场比赛有两个球队对抗,它们的编号分别是Pi和Qi.小明认为一场比赛的精彩度等于两队实力的乘积,小红则认为是两队帅哥数量之和. 由于体力的限制,他们最多只能看K场比赛.当然,只要看比赛,两个人一定会一起看.小明…