![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法竞赛入门经典
园游会不打烊
这个作者很懒,什么都没留下…
展开
-
UVA11300 Spreading the Wealth 题解
题意:圆桌旁边坐着nn个人,每个人有一定数量的金币,金币的总数能被nn整除。每个人可以给他左右相邻的人一些金币,最终使得每个人的金币数量相等。您的任务是求出被转手的金币的数量的最小值。解题思路:本题要点:1、最后每个人拿到的金币就是每个人初始金币的平均值(设为avgavgavg)。2、对于相邻的两个人只会其中一个给另一个若干金币(两个人都给的话会抵消),不妨设第iii个人给第i−1i-1i−1个人若干金币。3、如果确定了一对相邻人给的金币,那么其它的全部确定。4、答案就是每对相邻的人给的金币的原创 2020-10-16 16:33:41 · 291 阅读 · 0 评论 -
UVA 12264 题解
题目描述:给你一个无向图,上面每个点都有权值,如果权值为000,则表示这个点是敌方领土,否则这个点就是你的领土,权值就是当前领土你的士兵的人数,有一个操作:每个点的士兵可以不移动,也可以移动一步,但是要保证操作过后每个自己的领土至少有一个士兵。现在在要让边界领土(和敌方领土相邻的领土)中的最少士兵数量尽量大,求这个值。解题思路:首先我们二分答案,接下来就是要判断当前值是否可以满足条件,需要用最大流来完成,我们把每个点iii拆成两个点i,i′i,i'i,i′。iii表示操作前这个点的人数,i′i'i′表原创 2020-08-26 16:18:21 · 159 阅读 · 0 评论 -
UVA753 A Plug for UNIX 题解
题目描述:有 nnn 个插座,mmm 个设备和 k(n,m,k≤100)(n,m,k≤100)k (n, m, k \leq 100)(n,m,k \leq 100)k(n,m,k≤100)(n,m,k≤100)种转换器,每种转换器有无限多。已知每个插座的类型,每个设备的插头类型,以及每种转换器的插座类型和插头类型。插头和插座类型都用不超过 2424 个字母表示,插座只能插到类型名称相同的插座中。 例如,有 44 个插座,类型分别为 A,B,C,D;有 5 个设备,插头类型分别为 B,C,B,B,X;还有原创 2020-08-08 15:46:36 · 118 阅读 · 0 评论 -
UVA658 It‘s not a Bug, it‘s a Feature! 题解
题目描述:补丁在修正BUG时,有时也会引入新的BUG,假定有n(n<=20)n(n<=20) 个潜在BUG,和m(m<=100)m(m<=100) 个补丁,每个补丁用两个长度为nn 的字符串表示,其中字符串的每个位置表示一个bug,第一个串表示打补丁之前的状态(“-”表示该BUG必须不存在,“+”表示该补丁必须存在,0表示无所谓),第二串表示打补丁之后的状态(”-“表示不存在,“+”表示存在,0表示不变)。每个补丁有一定的执行时间,你的任务是用最小的时间把所有BUG都存在的软件变得原创 2020-08-07 10:20:01 · 251 阅读 · 0 评论 -
UVA1151 Buy or Build 题解
题目描述平面上有nnn个点,你的任务是让所有nnn个点连通,为此,你可以新建一些边,费用等于两个端点的欧几里得距离的平方。另外还有qqq个套餐,可以购买,如果你购买了第iii个套餐,该套餐中的所有结点将变得相互连通,第iii个套餐的花费为cicici。求最小花费。解题思路紫书P358,...原创 2020-08-05 16:12:05 · 130 阅读 · 0 评论 -
UVA1395 Slim Span(苗条的生成树) 题解
题目描述求所有生成树中最大边权与最小边权差最小的,输出它们的差值。解题思路紫书P358,原来以为很难,看来书发现是个水题,复杂度O(m2∗log(n))O(m^2*log(n))O(m2∗log(n))并不会超时。虽然紫书上已经说的很清楚了,不过还是打算稍微写下:按权值从小到大将边排序,那么对于排序后的边集区间[l,r][l,r][l,r]如果能把点全部连通,那么对于这个边集区间的答案W[r]−W[l]W[r]-W[l]W[r]−W[l]。枚举所有边集区间,复杂度m2m^2m2,在加上判断连通可以用原创 2020-08-04 17:09:05 · 133 阅读 · 0 评论 -
POJ1742 Coins 题解(AcWing 281,hdu 2844)
问题描述:给定N种硬币,其中第 i 种硬币的面值为Ai,共有Ci个。从中选出若干个硬币,把面值相加,若结果为S,则称“面值S能被拼成”。求1~M之间能被拼成的面值有多少个。解题思路:这题很明显是个多重背包问题,只需设dp(i,j)dp(i,j)dp(i,j)为前iii种硬币能否组成面值SSS,根据多重背包的思路可以使用二进制优化每个物品数量可以解决,但是我提交了只在hud上过了,poj和acwing都TLE了。多重背包也能用优先队列优化,我提交后再三个平台都TLE了(???是我写的不够漂亮)?这原创 2020-07-31 10:59:51 · 198 阅读 · 0 评论 -
POJ1015 Jury Compromise 题解(AcWing280、UVA323)
题目描述:有nnn个物品,每个物品有两个属性ppp和ddd,从这nnn个物品中选取mmm个,记ppp的总和为spspsp,ddd的总和为sdsdsd,要使得∣sp−sd∣|sp-sd|∣sp−sd∣尽量小,如果一样使sp+sdsp+sdsp+sd尽量大,如果还有一样,输出任意组合,输出物品编号并按升序输出。解题思路:设dp(i,j,k)dp(i,j,k)dp(i,j,k)为前iii个物品选了jjj个并且ppp的总和和ddd的总和的差为kkk,(即sp−sdsp-sdsp−sd)时spspsp的最大值(原创 2020-07-29 10:42:31 · 176 阅读 · 0 评论 -
UVA12105 Bigger is Better 详解
UVA12105 Bigger is Better题目描述:紫书P293用不超过 n(1≤n≤100)n(1 \leq n \leq 100)n(1≤n≤100) 根火柴摆出一个尽量大的、能被 m(1≤m≤3000)m(1 \leq m \leq 3000)m(1≤m≤3000) 整除的数。解题思路方法一:来自紫书,设dp(i,j)dp(i,j)dp(i,j)表示用iii根火柴能拼出除以mmm余数为jjj的最大的数,枚举在对右边添加数字kkk,用dp(i,j)∗10+kdp(i,j)*10+kd原创 2020-07-24 16:09:50 · 244 阅读 · 0 评论