
Practice
风中之神111
我亦飘零久
展开
-
Hdu1914稳定婚姻匹配
题意:给出 n 个男生,n 个女生,给出他们对异性的喜欢顺序,求一个稳定的婚姻组合。思路:稳定婚姻匹配裸题#include <cstdio>#include <cstring>#include <algorithm>typedef long long LL;const int INF = 0x3f3f3f3f;const int maxn ...原创 2019-07-27 18:42:12 · 230 阅读 · 0 评论 -
Uva1626
题意:一组只由[ ,],(, ),组成的字符串,然后对他进行增添字符,使其匹配;求给他增添的最少的括号的数量,然后输出匹配后的序列.思路:区间DP如果s 形如(s’)和 [s’]可以转移到d[s’]如果s至少有两个字符,可以分成AB,转移到d[A] + d[B];边界是s为空时,d(s) = 0; s为单字符时,d(s) = 1;不管 S 是否满足第一条,都要尝试第二条,否则“[]...原创 2019-03-12 21:26:12 · 294 阅读 · 2 评论 -
Uva10934装满水的气球
题意你有k个一模一样的水球,在一个n层楼的建筑物上进行测试,你想知道水球最低从几层楼往下丢可以让水球破掉。由于你很懒,所以你想要丢最少次水球来测出水球刚好破掉的最低楼层。(在最糟情况下,水球在顶楼也不会破)你可以在某一层楼丢下水球来测试,如果水球没破,你可以再捡起来继续用。思路在假设你有无数个水球的情况下,那么最少的次数肯定就是用二分的方法:首先在正中间摔下去,如果破的话,说明目标位置在下...转载 2019-03-21 11:17:14 · 285 阅读 · 0 评论 -
Uva10003切木棍
题意:题目的意思就是,有一根木根,长度为 l ,要给它n刀.分别在c1,c2,c3…cn的位置切.每一刀的消费是当前这段木棍的长度.比如长度10 , 要在2,4,7三个位置切.假设顺序是 4, 2 ,7.切4这个位置的时候,木棍长度10 ,消耗10,然后切2这个位置的时候,它所在的地方木棍长度是4 ,消耗4,切7时消耗6.总共10 + 4 +6 = 20.这种切法也是最省的,如果2....原创 2019-03-12 19:07:57 · 291 阅读 · 0 评论 -
Uva1627团队分组(二分图+DP)
题意:思路:预备知识:二分图。只要A,B不是互相认识,那么肯定在不同的大组里。先根据不认识的关系建立图(只要a,b不是互相认识他们之间就有一条边),这个图可以有多个连通分量。对于每个连通分量,如果是二分图,说明这个连通分量可以分成两个小组(1组和2组),且这两个小组最终会进入不同的大组(A组和B组)。如果不是二分图,说明总要有不认识的人在一个小组,存在矛盾,无解。接下来,需要在...原创 2019-03-20 20:29:20 · 388 阅读 · 0 评论 -
Uva116单向TSP
题意:给定一个n*m的矩阵,要求从第一列的任何一行出发,每次沿右或右下或右上到达后面一列,最后到第m列,要求经过的整数之和最小,如果多解要求是解的行字典序最小的。矩阵是环形的,即第一行的上一行是最后一行,最后一行的下一行是第一行。思路:逆向递推。定义状态:d[ i ][ j ] 为(i , j )到最后一列的最小和。边界条件是最后一列,d[ i ][ n] = table[ i ][ n ],...原创 2019-03-08 10:54:56 · 428 阅读 · 5 评论 -
UVa10817校长的烦恼
题意:某校有m个教师和n个求职者,需讲授s个课程,已知每人的工资c和能教的课程集合,要求支付最少的工资使得每门课都至少有两名老师能教,在职老师不能辞退。思路:定义状态: d[ i ][s0][s1][s2]: 前 i 位老师在当前状态下(s0,s1,s2)的最小花费。其中,s0:0人代课的科目集合; s1:1人代课的科目集合; s2:至少2人代课的科目集合 。s0可以由s1和s2...原创 2019-03-16 10:53:54 · 312 阅读 · 0 评论 -
Uva1331最优三角剖分
题意:输入一个多边形,找一个最大三角形面积最小的三角剖分,输出最大三角形的面积。思路:区间DPdp[i][j]表示从i点到j点的最优值,枚举中间点k。转移方程为dp[i][j]=min(dp[i][j],max(area(i,j,k),max(dp[i][k],dp[k][j])))。注意需要检验选的这个 k 是否有效,如果i-k或j-k两个对角线的任意一条与其他边相交,那么这个k就不能...原创 2019-03-11 17:04:51 · 293 阅读 · 0 评论 -
UVa10618跳舞机
题意长且烦:https://vjudge.net/problem/UVA-1252思路:信息量太杂,理不过来…看了LRJ大佬的代码,nb。定义状态:d[i][a][b][s]:已经踩了 i 个箭头,左右脚在a,b上,上一时刻移动的脚是s。当字母是’.'时,有3种决策:不动,左脚移动,右脚移动。当字母是箭头时:有2种决策,左脚移动到目标,右脚移动到目标。能量的计算: t 时刻的能量需要...原创 2019-03-19 20:43:36 · 382 阅读 · 0 评论 -
TSP问题(小规模)
问题:货郎担问题提法:有n个城市,用1,2,…,n表示,城i,j之间的距离为dij,有一个货郎从城1出发到其他城市一次且仅一次,最后回到城市1,怎样选择行走路线使总路程最短?思路:假设周游路线是开始于结点1并终止于结点1 的一条简单路径。每一条周游路线都由一条边〈1,k〉和一条由结点k 到结点1 的路径所组成, 其中k∈V-{1} ; 而这条由结点k 到结点1 的路径通过V-{1 ,k}的每...原创 2019-03-15 11:58:19 · 1407 阅读 · 0 评论 -
UVa1347旅行
题意:n个点,坐标给出,设计一条路线,从最左边的点,走到最右边的点,再回来,除最左边的点和最右边的点外,每个点有且经过一次。求最短距离。分析:转换一下思路,不是一个人在走,而是两个人从同一起点出发,走不同的两条路,在终点相遇。假设两个人是 i, j,这样可以定义状态 d[i][j] :一个在 i ,一个在 j ,离终点 n 还要多少距离。但是有一个问题,很难知道下一个要走的点是否被另一个人走...原创 2019-03-07 19:15:43 · 251 阅读 · 0 评论 -
UVa1336修缮长城
思路要想最终代价最低,就不能跳跃着修复,也就是经过一段时间后已经修复好的破损应是一段连续区间。每次只有两个决策:向左走或者向右走。根据这个可以设计出状态:dp(i,j,k)表示修好(i,j)后机器人停留在k(0表示在左端,1表示在右端)端的费用。另外, c 值的总和是固定的费用,不论决策如何,最终都是要加的。因此不用加入状态转移。不过最后不要忘了加上它修复某处破损的代价虽然不是定值,但...原创 2019-03-21 21:29:19 · 314 阅读 · 0 评论 -
UVa1412基金管理
题意思路:本题的基本思路是明确的,用d(i,p)表示经过 i 天之后,资产组合为p时的现金的最大值。另外值得注意的是,本题在考虑买股票时要考虑到当前拥有的现金是否足够,因此不是一个DAG最长/最短路问题,因为某些边u->v的存在性依赖于起点到点u的最短路值。也就是说,本题不能像之前的DAG问题一样“反着定义”:如果用d(i,p)表示资产组合为p,从第 i 天开始到最后能拥有的现金最大...原创 2019-03-18 18:34:37 · 370 阅读 · 0 评论 -
Uva1667NetworkMess——建树
题意:有一颗n个叶子的无权树,输入两两叶子的距离,恢复出这棵树并输出每个非叶子节点的度数。思路:参考:https://blog.youkuaiyun.com/zju2016/article/details/78450509无根树,现将一个叶子节点作为根。逐个探测剩下的叶子节点,并在这个过程中不断增加内部节点以满足其距离要求,最终建树完成。内部节点 j 的选择:逐步测试是否能够找到某个内部的节点,...原创 2019-06-22 20:37:52 · 629 阅读 · 0 评论 -
uva1660电视网络-最小割最大流
题意:求无向图的点连通度(最少删除几个点,使得图不连通)思路:求最小割(最大流)。每个点只能被用一次,否则可能有多条增广路公用同一个点,而其实删掉这一个点就足够破坏这些路了。点只能用一次,想到拆点法。然后最大流算法就行了。写了几个不同算法熟悉一下,结果ISAP的时候卡住了,怎么答案老不对,原来是由于用了拆点法n变成了2n。#include <cstdio>#include ...原创 2019-06-11 19:03:34 · 239 阅读 · 0 评论 -
uva10735混合图的欧拉回路_最大流
题意:混合图的欧拉回路,存在的话输出路径,不存在输出提示信息。思路:回忆概念:如果图G中的一个路径包括每个边恰好一次,则该路径称为欧拉路径(Euler path)。如果一个回路是欧拉路径,则称为欧拉回路(Euler circuit)。无向图存在欧拉回路的充要条件一个无向图存在欧拉回路,当且仅当该图所有顶点度数都为偶数,且该图是连通图。有向图存在欧拉回路的充要条件一...原创 2019-06-02 13:58:45 · 393 阅读 · 0 评论 -
uva1001奶酪里的老鼠-最短路
题意:给出一些球,球内的时间为零,球之间的速度为10每单位。给两个点,求最短时间。思路:所有点看做洞,起点和终点可以看做r=0的洞,洞到洞的最短距离都是圆心距离减去半径(>=0)。剩下的就是dijdstra了。// 最短路 #include <cstdio>#include <queue>#include <cmath>#include...原创 2019-06-07 11:37:37 · 477 阅读 · 0 评论 -
uva821网页跳跃
题意:求所有点直接的平均最短距离思路:对每个点编号,然后Floyd,统计// Floyd算法 #include <cstdio>#include <map>#include <cmath>#include <cstring>#include <algorithm>#define fi first#define se ...原创 2019-06-07 11:34:11 · 227 阅读 · 0 评论 -
有趣的赛车比赛uva12661最短路
题意:有n个城市,m条边,问你从城市s到tt的总时间。每条路都有开放时间和关闭时间,还给出了你通过那条路的时间,你必须在那条路开放的时间内通过那条路,不然的话就只能等待那条再次开放然后通过,开关的计时是在从城市s出发开始的。思路:算出当前时间,路径距离关闭还剩下的时间,如果大于t,那么可以通过,否则,只能等到下一次。如果下一次也不能通过,即t>a,输入的时候忽略这些边。求耗费时有点...原创 2019-06-01 16:24:46 · 205 阅读 · 0 评论 -
uva11082矩阵解压
题意:对于一个R行C列的正整数矩阵,(1<=R,C<=20),设a[i]为前i行所有元素之和,b[i]为前i列所有元素之和,已知道R,C,和数组a,b,找一个满足条件的矩阵,矩阵中的元素必须是1~20之间的正整数,输入保证有解。思路:转化为网络流问题根据输入先算出每行,每列的和。每行的和减列数c,每列的和减行数r,这是为后面的容量做铺垫。每行(列)视为一个点,每行到每列连一条弧,...原创 2019-06-01 10:19:39 · 308 阅读 · 0 评论 -
插头Uva753——最大流
题意:n个插座和m个插头,k种转换器(每种都是无限个,可以把插头转换成其他类型的插头),求最少剩多少个插头没插上插座。思路:首先给所有插头或插座以及转换器中涉及到的类型编号。然后根据转换器建立类型之间的转化关系,接着用Floyd算法算出每个设备所有适配的类型,并将其容量设为INF,表示转换器数量充足,可以有多个设备用同一种转换器。接着构建网络:所有的设备类型和源点连一条弧,容量为1(注意累...原创 2019-05-31 22:11:30 · 314 阅读 · 0 评论 -
POJ365Ants_二分图最佳匹配
https://blog.youkuaiyun.com/lianai911/article/details/44835659题意:在坐标系中有N只蚂蚁,N棵苹果树,给你蚂蚁和苹果树的坐标。让每只蚂蚁去一棵苹果树,一棵苹果树对应一只蚂蚁。这样就有N条直线路线,问:怎样分配,才能使总路程和最小,且N条线不相交思路:假设A、B为蚂蚁,C、D为苹果树。则存在两种匹配:第一种是AD、BC,第二种是AC、B...转载 2019-05-30 22:06:37 · 248 阅读 · 0 评论 -
UVa12099书架
题意:给你n(3<=n<=70)本书,每本书有一个高度h和宽度t,你要构造一个三层的书架,把所有书都放上,使书架的总高度*3层中的最大宽度最小。思路:书架有3层,每一层都有高度和宽度,状态里怎么表示呢。首先把书按照高度排序(从高到低),最高的放在第一层,以后再在第一层加书,第一层的高度也不会变了。d[i][j][k]:安排完前 i 本书,第2层书的宽度为j,第3层书的宽度为k时...原创 2019-03-24 12:17:55 · 353 阅读 · 0 评论 -
UVa12105越大越好
题意思路:第一个思路很容易想到,dp[i][j]代表用了i根火柴,除m余j的最大数。用刷表法,每次选择一个数k放在最右边,用dp[i][j]×10+k去更新dp[i+needs[k]][ ( j×10+k) % m], 其中needs[i]:i 所需要的火柴个数。不过因为有100个火柴,会涉及到大数。导致计算量挺大,890ms。第二个思路不好想。定义状态(i,j)表示用不超过i根火柴拼出...原创 2019-03-22 18:37:37 · 694 阅读 · 1 评论 -
最优配对问题
题意:给出n个点的空间坐标(n为偶数, n<=20), 把他们配成n/2对, 问:怎样配对才能使点对的距离和最小?思路:状态定义:设d(i, s)表示前i个点中,位于集合s中的元素两两配对的最小距离和则状态转移方程 d(i,S)=min{|PiPj|+d(i-1,S-{i}-{j}。改进:状态可以进行压缩,i的值其实隐藏在S中,S中最高位为1的即为i,所以需要一次查找,从n-1...转载 2019-03-15 10:27:43 · 1925 阅读 · 0 评论 -
UVa1252二十个问题
题目描述:有n个物体和m个特征,每个物体用一个01串表示,第i位为1说明该特征该物体具有。我在心里想一个这n个物体的其中一个,你每次询问一个特征,我回答这个物体是否具备这个特征,当你确定答案后把答案告诉我。假设你采取最优策略,最少询问多少次就能保证猜到?(m<=11,n<=128)思路:集合上的DP因为每个特征不用问两遍,所以题目意思大致是问至少问多少个特征可以把所有物品区分开。...原创 2019-03-19 15:39:18 · 308 阅读 · 0 评论 -
UVa1609 Foul play
#include <cstdio>#include <vector>using namespace std;const int N = 1024+5;char table[N][N];int main(){ int n; //freopen("in.txt","r",stdin); while(scanf("%d",&n) == 1){...原创 2019-03-04 18:38:50 · 268 阅读 · 0 评论 -
UVA-714抄书
因为子序列的和一定不大于整个序列的和,先求出整个序列的和 和 其中最大的一个,作为R和L,然后进行二分。找到使得子序列和最小的那个数。然后在这个基础上,看能不能优化划分方式,使得前面的划分序列和尽量小。PS:求序列和用long long#include <cstdio>#include <cstring>const int N = 500+5;int A[N]...原创 2019-03-01 13:18:27 · 242 阅读 · 0 评论 -
UVA-11054 Gergvia的酒交易
贪心,扫描。考虑最左边的村庄,假设它需要买酒,a1>0,那么一定需要a1个劳动力从村庄2运过来,而不管这些就是村庄2的,还是从更远处运到村庄2的。同理,a1<0时也成立。#include <cstdio>#include <cmath> int main(){ int n; //freopen("in.txt","r",stdin); whil...原创 2019-02-25 11:45:02 · 131 阅读 · 0 评论 -
UVa-11134传说中的车
将复杂问题进行分解。行列无关,可以分开来解,分解成两个一维问题。在区间【1-n】内选择n个不同的整数,使得第i个整数在闭区间【l,r】上。输入时对所有区间编号,按 区间右端点从小到大排序,如果右端点一样,按左端点从小到大排序。然后,每次从区间的左端点向右选,如果没有被选过就选上,继续下一个区间。如果有哪一个区间一个点都选不上,那么无解。#include <cstdio>#incl...原创 2019-02-25 10:46:57 · 235 阅读 · 0 评论 -
UVa-12325宝箱
https://blog.youkuaiyun.com/jc514984625/article/details/51803842题目大意:你有一个体积为N的箱子和两种数量无限的宝物。宝物1的体积为S1,价值为V1;宝物2的体积为S2,价值为V2。输入均为32位带符号的整数。你的任务是最多能装多少价值的宝物?我首先想到完全背包,后来RE才发现数组开不下,要用枚举,参看了上面网址的这篇博客。方法:其实也没...转载 2019-02-19 15:12:30 · 239 阅读 · 0 评论 -
UVa-1152-和为0的四个值
暴力O(n4)超时。思路1:二分。枚举所有a+b(a属于A[],依次类推),把所有 a+b 记录下来放在一个数组sum中,对sum排序。然后枚举所有 -c-d ,在 sum 中二分查找有几个这样的值,用upper_bound() - lower_bound() 就是个数,累计到结果中。 O(n^2logn)运行 2750ms#include &lt;cstdio&gt;#include ...原创 2019-02-24 20:35:44 · 352 阅读 · 0 评论 -
UVa-12558埃及分数
迭代加深搜索#include &lt;cstdio&gt;#include &lt;set&gt;#include &lt;cstring&gt;#include &lt;algorithm&gt;using namespace std;typedef long long LL;set&lt;LL&gt; ban;const i原创 2019-02-19 11:49:51 · 299 阅读 · 0 评论 -
UVa-11212编辑书稿
https://blog.youkuaiyun.com/flsjzl/article/details/51785488题意:你有一篇n个自然段组成的文章,希望将它们排列成1,2,…,n。可以用Ctrl+X(剪切)和Ctrl+V(粘贴)快捷键来完成任务。每次可以剪切一段连续的自然段,粘贴时按照顺序粘贴。注意,剪贴板只有一个,所以不能连续剪切两次,只能剪切和粘贴交替。例如,为了将{2,4,1,5,3,6}变为...原创 2019-02-19 10:35:17 · 234 阅读 · 0 评论 -
UVa-1601万圣节后的早晨
隐式图。“任何一个2*2子网格至少有一个障碍格”,暗示有很多障碍格且很多空格和障碍相邻。因此可以把所有的空格提取出来建立一张图,而不是临时判断向上,向下,向左,向右和原地不动这5种方案是否合法。邻接表存储隐式图: 把所有空格子编号cnt,这样每个位置都可以用1个一维的数来表示adj[i]:i 号格子下一步可以走几个格子。G[i][5]:i 号格子的下一步可走的格子编号,最多5个。如何处理...原创 2019-02-16 18:32:57 · 302 阅读 · 0 评论 -
UVa-1343旋转游戏
https://www.cnblogs.com/Bowen-/p/4955782.html题意: 有个#字型的棋盘,2行2列,一共24个格。如图:每个格子是1或2或3,一共8个1,8个2,8个3.有A~H一共8种合法操作,比如A代表把A这一列向上移动一个,最上面的格会补到最下面。求:使中心8个格子数字一致的最少步骤,要输出具体的操作步骤及最终中心区域的数字。如果有多个解,输出字典序最...转载 2019-02-21 21:20:51 · 304 阅读 · 0 评论 -
UVA-1599理想路径
思路:两趟BFS。第一趟从终点开始BFS,到达起点后停止。目的是求得从起点到终点道路(可能不止一条)上的点到终点的最短距离,将这些点按照距离远近分层,用一个数组记录。第二趟从起点开始正向做一次BFS,每次都选取颜色最小的路径,同时要保证距离的值刚好减1,如果有多条路可以走,则要记录这些结点,下一步需要考虑所有从这些点出发的边。#include <iostream>#includ...原创 2019-02-04 10:26:46 · 344 阅读 · 0 评论 -
UVA-1572-自组合
思路:把字符看做点,把正方形看做边,建立有向图,拓扑排序,寻找有向环,若有环则可以无限延伸,否则不可以。具体来说,每个点包含2个字符,一个是(A-Z),另一个是(+,-),(有一个特殊情况是00,我们不考虑,因为它不和任何一个点相连)。A+,A-,B+,B-…一共52个,分别分配下标// 后面带+号的下标为偶数,-号的为奇数 int ID( char x1, char x2 ) { re...原创 2019-02-03 13:40:43 · 423 阅读 · 0 评论 -
UVA12627奇怪的气球膨胀
https://vjudge.net/problem/UVA-12627找规律。用 f(k,i)表示:第 k 小时最上面 i 行有多少红球。找a-b行红球的数量,也就是求 f(k,b) - f(k,a-1)。k 时刻的状态是和 k-1的状态紧密相关的。k 时刻状态是 3 个 k-1时刻的状态(分别位于左上,左下,右上),右下全是蓝色球。所以,当 i <= 2^(k-1),等于左上和右上...原创 2019-03-01 19:56:25 · 317 阅读 · 0 评论 -
UVA-11093-环形跑道
题意:环形跑道上的加油站有n个,第i个加油站加油pi单位,开到下个加油站需要qi单位,求一个最小的起点编号使得从该点出发可以绕一圈回到该起点。**思路:**枚举从1开始起,模拟油量以及消耗的过程,假设到 k 点后油量不足以到达下一个点 ,那么1-k的点都不能做起点。以k+1作为新起点,记住当前还需要(欠)多少油,用pay表示,这些欠的油需要后面这段路来补充,如果后面这段路走完后最终剩余的油量仍...原创 2019-03-01 20:32:59 · 640 阅读 · 0 评论