UVa
文章平均质量分 71
Interstellar_
这个作者很懒,什么都没留下…
展开
-
UVaLive 2757 Supermarket (贪心+优先队列)
题目链接:https://vjudge.net/problem/UVALive-2757题目大意:有n个商品,商品i的利润为pi,销售截止日期为di(必须不晚于截止日期销售才有利润),销售每个商品需要1天时间。求最大利润。思路:可以倒过来想,将商品按截止日期从晚到早排序,从大到小枚举日期d,每次将截止日期不晚于d的商品加入优先队列中,然后取出优先队列中的最大值即可。因为是从玩到早加入队列,原创 2017-10-05 08:20:42 · 386 阅读 · 0 评论 -
UVa 11297 Census 二维线段树模板
题目链接:https://vjudge.net/problem/UVA-11297 二维线段树模板题,单点修改与区间查询,这里按照刘汝佳说的加了个build函数,能起到一定的优化效果。#include#include#includeusing namespace std;const int INF = (1<<30);const int maxn = 2000 + 10;原创 2017-07-04 15:00:12 · 387 阅读 · 0 评论 -
UVa 11324 The Largest Clique (强连通分量,dp)
题目链接:https://vjudge.net/problem/UVA-11324题意:给一张有向图G,求一个节点数最大的结点集,使得该结点集中任意两个结点u和v满足:要么u可以到达v,要么v可以到达u(或者u和v相互可达)思路:首先求出图的强连通分量,并把其收缩点得到scc图,每个scc结点权值为它的节点数。则问题转化成了,给出一个DAG图,各点权值已知,求一条权值最大的路径,可以用dp原创 2017-03-14 15:40:19 · 392 阅读 · 0 评论 -
UVa 242 Stamps and Envelope Size (完全背包)
题目链接:https://cn.vjudge.net/problem/UVA-242题意:一个信封最多能够贴s张邮票,现在有n个邮票的集合,求能够连续覆盖最大的值思路:最开始的天真的以为直接枚举邮资值会超时,因为这个值可能特别大。遂想到了dp(i,j)表示前i种有票用j张所能表示的最大的连续值,结果状态转移方程怎么写都写不对。最后看了题解才知道还是要从枚举邮资值入手。唉,现在怎么变得不敢暴原创 2017-02-15 15:06:11 · 525 阅读 · 0 评论 -
UVa 1629 Cake slicing (记忆化搜索)
题目链接:https://cn.vjudge.net/problem/UVA-1629题意:一个n行m列的蛋糕上有一些樱桃,每次可以水平或竖直切一刀,要求最后每块蛋糕上恰有一块樱桃,求最小切割长度。思路:用dp(r1, r2, c1, c2, k)表示当前矩形区域为[r1,r2],[c1,c2]且该区域有k块蛋糕时的最小切割长度。当k为1时,答案为0;当k>1时,递归的进行横切或者竖切即可原创 2017-02-14 15:08:25 · 609 阅读 · 0 评论 -
UVa 10905 Children's Game (贪心)
题目链接:https://vjudge.net/problem/UVA-10905题意:给你n个数字,把它们连接成一个最大的数字。思路:好坑的题,前期总是想怎么比较两个的大小,考虑了很多情况但仍想不全。然而...... 用string存储数字,设两个数字分别为s1,s2。若s1+s2 > s2+s1,则s1应排在s2前面。#include#include#原创 2017-01-19 22:52:40 · 318 阅读 · 0 评论 -
UVa 1632 Alibaba (区间dp)
题目链接:https://cn.vjudge.net/problem/UVA-1632题意:给出n个点的坐标及各个点的消失时间,用最短的时间访问所有的点,求这一时间。思路:因为访问某个点是不费时间的,所以容易知道,访问过的一定是一个连续的区间。所以初步想到用dp[i][j][k]表示已经访问了区间i到j,现在位于k点的最短时间。但这样显然是不行的,时间和空间都容不下。再想发原创 2017-02-18 10:03:54 · 389 阅读 · 0 评论 -
UVa 1616 Caravan Robbers (二分)
题目链接:https://vjudge.net/problem/UVA-1616大意:输入n个区间,把它们分成等长的、互不相交的子区间,求子区间的最大长度。思路:二分答案,再小数化分数即可。#include#include#include#include#include#includeusing namespace std;const int maxn = 1e6原创 2017-02-04 20:53:08 · 468 阅读 · 0 评论 -
UVa 1658 Admiral (最小费用最大流、拆点法)
题目链接:http://vjudge.net/problem/UVA-1658题意:给出n个点m条边,求1-n的两条不相交的路径(除1和n外,每个点仅经过一次),使得路径总权值最小。思路:除起点终点外,每个点仅经过一次,这就限制了结点的经过次数。为了达到这个效果,我们把除起点终点外每个点u拆成u和u',中间连一条容量为1、费用为0的弧,这样原来u-v的弧就变成了u-u'-v原创 2016-11-02 20:59:30 · 576 阅读 · 0 评论 -
UVa 1608 Non-boring sequence (分治)
题目链接:https://vjudge.net/problem/UVA-1608题意:给出一个整数序列,若序列的任意一个连续子序列都至少有一个只出现一次的元素,则该序列为不无聊序列。判断一个序列是否无聊。思路:若某个元素在整个序列中只出现一次,则所有包含该元素的连续子序列都为不无聊序列。因此,找到这样一个元素后,只需判断该元素左边与右边的序列是否为无聊序列即可。 怎么找到这样的元素呢?可以原创 2017-08-16 14:50:39 · 388 阅读 · 0 评论 -
UVa 12118 Inspector's Dilemma (欧拉道路)
题目链接:https://cn.vjudge.net/problem/UVA-12118大意:给出一个V结点的图,每两点之间都有一条双向道路相连,长度为T。现要找一条最短的道路,使得该道路经过E条指定的边。思路:本题可以转化为,已知E条边,现要增加尽量少的边,使它们和这E条边组成欧拉通(回)路。因为图不一定连通,所以要想满足要求,每个连通块都要设法将其变成欧拉通(回)路,具原创 2017-07-26 08:44:38 · 570 阅读 · 0 评论 -
UVALive 2755 Hidden Password (最小表示法)
题目链接:https://cn.vjudge.net/problem/UVALive-2755题目大意:求一个字符串的最小字典序表示思路:参考https://wenku.baidu.com/view/185b95d726fff705cc170a7a.html,复杂度为O(n)#include#include#include#include#include#includ原创 2017-08-25 09:43:11 · 310 阅读 · 0 评论 -
UVa 108 Maximum Sum (经典问题转化)
题目链接:https://vjudge.net/problem/UVA-108题目大意:求矩阵的最大子矩阵和思路:本体可以由一个经典问题“求一个序列的最大连续子序列”,该一维问题可以由一个简单dp来实现,令dp[i]表示以i结尾的最大连续子序列,则dp[i] = max( dp[i-1]+a[i], a[i] ),可以在O(n)的复杂度内解决。对于二维的情况,我们需要做一个转化,首先一个二原创 2017-10-10 19:30:52 · 490 阅读 · 0 评论 -
UVa 1450 Airport (二分+思路)
题目链接:https://vjudge.net/problem/UVA-1450题目大意:某飞机场有两个通道W和E。每一时刻都有一些飞机到达W通道或E通道(数目分别为ai和bi),每个通道的飞机按照来的顺序编号为0 1 2 ...,然后,每一时刻只能有一架飞机起飞。求任意时刻停留在机场的飞机的最大编号的最小值。思路:首先二分答案ans,判断是否存在一种方案,使得最大编号为ans。在判断时,原创 2017-10-03 16:25:38 · 443 阅读 · 0 评论 -
UVa 11100 The Trip, 2007 (水题)
题目链接:https://vjudge.net/problem/UVA-11100题目大意:给定n个正整数,把它们划分成尽量少的严格递增序列。思路:容易知道,严格递增序列的个数就是出现次数最多的数。直接暴力即可。#include #include #include #include #include#include #include#include#includeus原创 2017-10-02 10:36:24 · 499 阅读 · 0 评论 -
UVALive 2963 Hypertransmission
题目链接:https://vjudge.net/problem/UVALive-2963题目大意:有n个星球,每个星球坐标为(xi,yi,zi),可以看成一个点。每个星球广播A类节目或B类节目,广播范围为R(以该星球为中心半径为R的球体)。令N+(i)表示星球i听到的和自己广播相同节目的星球数(包括自己),N-(i)表示星球i听到的和自己广播不同节目的星球数。如果N+(i)思路:容易知道,原创 2017-10-09 19:08:42 · 416 阅读 · 0 评论 -
UVa 1153 Keep the Customer Satisfied (贪心+优先队列)
题目链接:https://vjudge.net/problem/UVA-1153题目大意:有n(n≤800000)个工作,已知每个工作需要的时间qi和截止时间di(必须在此之前完成),最多能完成多少个工作?工作只能串行完成。第一项任务开始的时间不早于时刻0。思路:将任务按照截止时间排序,对于每个任务,若满足要求就直接完成,若不满足要求,则从已完成任务中选取一个时间最长的取消,将当前的工作放原创 2017-10-06 17:48:19 · 463 阅读 · 0 评论 -
UVALive 5913 Dictionary Size (Trie)
题目链接:https://vjudge.net/problem/UVALive-5913题目大意:给出n个旧单词,要从这n个旧单词中构造新单词。构造条件是 S = Sa + Sb,其中Sa为某个旧单词的非空前缀,Sb为某个单词的非空后缀。求所有的新单词和旧单词中有多少个不同的单词。思路:将所有单词建成一棵字典树,再将所有单词反转并建成一棵字典树。则第一棵树的结点个数即为不同原创 2017-08-24 10:29:19 · 406 阅读 · 0 评论 -
UVa 11148 Hyper Prefix Sets (Trie)
题目链接:https://vjudge.net/problem/UVA-11488题意:给定n个字符串,从n个字符串中选出若干个组成字符串集合S。定义P(S)为集合S中所有串的最长公共前缀长度与S中字符串个数的乘积。求一个集合S,使得P(S)最大。思路:首先将所有串建成一颗Trie树,然后遍历整个Trie树。当遍历到某个结点u时,从起始根节点往下到u构成了一个前缀,以这个为前缀的字符串个数原创 2017-08-23 17:01:10 · 327 阅读 · 0 评论 -
UVALive 4126 Password Suspects (AC自动机+DP)
题目链接:https://vjudge.net/problem/UVALive-4126题目大意:有一个长度为n的未知小写字母串,你已经知道了它的一些连续子串(但不知道出现位置,这些字串可能相互重叠)。比如,若长度为10,有两个连续子串hello和world,则只有两种可能:helloworld和worldhello。求可能的串的个数,若个数不超过42,按字典序输出所有串。思路:将连续子串原创 2017-08-27 09:26:26 · 637 阅读 · 0 评论 -
UVa 1401 Remember the Word (字典树, 动归)
题目链接:http://vjudge.net/problem/UV原创 2016-11-01 19:06:15 · 336 阅读 · 0 评论 -
UVALive 3645 Objective: Berlin (最大流,拆点法)
题目链接:http://vjudge.net/contest/138956#problem/B 把每条航线看做一个点,因为每条航线涉及两个时间点,所以把每个点拆成两个(u和u'),分别对应较早的和较晚的那个时间,之间连一条弧,容量为该航线的载客量。若航线i可以与航线j相连,则将航线i的u'向航线j的u之间连一条弧,容量为无穷大。并增加源点s和汇点t,由s向每个出发点(u)连原创 2016-10-31 20:09:19 · 517 阅读 · 0 评论 -
UVa 12299 RMQ with Shifts(线段树)
题目链接:http://acm.hust.edu.cn/vjudge/problem/23591大意:给出n个数q个询问。对于query(a,b),输出区间(a,b)的数的最小值;对于shift(a0,a1,a2,......,an),则将第a1个数的值赋给a0,第a2个数赋给a1......,第an个数赋给an-1,第a0个数赋给an思路:线段树模板题,为了修改方便,原创 2016-09-01 11:17:09 · 283 阅读 · 0 评论 -
UVa 1400 "Ray, Pass me the dishes!"(线段树)
题目链接:http://acm.hust.edu.cn/vjudge/problem/36216大意:给出n个数m个询问,对于每个询问(a,b),求【a,b】区间内的最大连续和区间【x,y】,若有多组解,二元组(x,y)原创 2016-08-31 21:15:28 · 496 阅读 · 0 评论 -
UVa 1428 Ping pong (树状数组)
题目链接:http://acm.hust.edu.cn/vjudge/problem/36244题目大意:给出n个不同的数,从左到右按顺序选出三个a1,a2,a3,使得a1>a2&&a2a3,问有多少种选法。思路:本题的关键在于,对于任意一个数,怎样快速求出它的两边各有多少个数比它大(小)。我们以左边为例,假设当前的数为a[i],那么它的左边比它小的数的个数即为1,2,3.原创 2016-08-20 20:31:20 · 412 阅读 · 0 评论 -
UVa 11584 Partitioning by Palindromes(DP)
题目链接:http://acm.hust.edu.cn/vjudge/problem/34398题意:给出一个字符串,把它划分成尽量少的回文串。没想到用O(n3)的暴力也能过,看来是数据太水。思路:dp[i]表示前i个字符能划分成的最小回文串数,设j#include#include#include#include#include#inclu原创 2016-08-19 18:59:13 · 329 阅读 · 0 评论 -
UVa 1395 Slim Span (最小生成树)
题意:给出一个n结点的图,求一棵生成树,使其最大边减最小边最小,并求出最小值。思路:将所有边排序,然后暴力求最小生成树即可。#include#include#include#include#includeusing namespace std;const int maxn = 10000;const int INF = 1e9 + 10;int n, m;int pre原创 2016-08-02 10:46:51 · 397 阅读 · 0 评论 -
UVa 1151 Buy or Build (最小生成树)
题目链接:http://acm.hust.edu.cn/vjudge/problem/36013题目大意:给你n个点,你的任务是让这n个点连通。为此,你有两种方法,1、在某两点之间建边,费用为两点之间欧几里得距离的平方。2、购买一些套餐,当买了某个套餐后,套餐中的这些点将变得相互连通,问完成任务的最小费用是多少。思路:若直接枚举套餐,再求最小生成树,肯定会超时。所以,按刘汝佳说的那样,先求原创 2016-08-06 09:56:21 · 542 阅读 · 0 评论 -
UVa 658 It's not a Bug, it's a Feature!(最短路问题)
题目链接:http://acm.hust.edu.cn/vjudge/problem/22169大体思路:按照刘汝佳的思路来的,把各个bug的状态(用一个二进制串来表示)当作结点,当前状态到下一状态当作边,然后套用dijkstra算法即可。在寻找边时,直接枚举所有补丁,看看哪个能打上,把打上之后的状态求出来,然后不断更新新状态,当出现0时(即所有bug都消失时),即退出。#include原创 2016-08-17 09:38:39 · 381 阅读 · 0 评论 -
UVa 1001 Say Cheese (Floyd)
题目链接:http://acm.hust.edu.cn/vjudge/problem/35891大体题意:给出n个球形洞的坐标和半径,以及小老鼠A和B的坐标,问小老鼠A最快多长时间能到达B的位置。思路:原创 2016-08-17 19:52:00 · 900 阅读 · 0 评论 -
UVa 1513 Movie collection (树状数组)
题目链接:http://acm.hust.edu.cn/vjudge/problem/36169题意:有n个数按1,2...,n从上到下排列,每次选择一个数,输出这个数上面有几个数,选择后的数放在最顶端。思路:这个题怎么用树状数组呢,我们知道,树状数组是用来修改点和求区间和的。在这个题中,每个数都有自己的位置,我们让位置编号从上到下依次递减,用数组C[i]表示第i个位置原创 2016-09-02 10:50:10 · 359 阅读 · 0 评论 -
UVa 11235 Frequent values (RMQ)
题目链接:http://acm.hust.edu.cn/vjudge/problem/23846大意:给出一个非降序排列的数组,对于一系列询问(i,j),输出ai——aj中出现次数最多的值出现的次数。思路:因为数组是按非降序给出的,所以相同的元素一定会连续出现,因此可以对每个数字进行编号(即该数字是)原创 2016-08-23 19:38:17 · 309 阅读 · 0 评论 -
UVa 11992 Fast Matrix Operations (线段树区间修改大杂烩)
题目链接:http://vjudge.net/problem/18697 这就是一个线段树区间修改的大杂烩,涉及区间加值,区间赋值,区间查询等等。只不过这是个矩阵,所以要对每一行分别建立一棵线段树再进行操作。但是有一点要搞清楚,如果既有赋值标记,又有加值标记。要先执行赋值,再执行加值。因为我们给区间赋值时会把加值的标记给去掉,因此若是既有赋值标记又有加值标记则说明是先赋的值原创 2016-09-14 19:41:44 · 409 阅读 · 0 评论 -
UVa 10570 Meeting with Aliens(思路)
题目链接:http://vjudge.net/problem/UVA-10570大意:给你一个由1-n组成的环状序列,每次可以交换任意两个数,用最少的交换次数将其变为1-n的环状排列。思路:可以直接枚举1所在的位置,对于每个位置,排列有顺时针排列和逆时针排列,分别计算一下即可。详见代码#include#include#include#include#in原创 2016-10-01 08:12:05 · 377 阅读 · 0 评论 -
UVa 11525 Permutation (线段树)
题目链接:http://vjudge.net/problem/UVA-11525大意:给定整数n和k,输出1-k的所有排列中,按照字典序从小到大排序后的第n个。其中,n = S1(k-1)! + S2(K-2)! + ... + Sk-1*1! + Sk *0!。思路: n的给出方式是极有规律的,很容易发现,Si即表示当前1-n中未被使用的第Si+1大的数原创 2016-09-28 17:10:35 · 396 阅读 · 0 评论 -
UVa 1611 Crane (思路题)
题目链接:http://vjudge.net/problem/UVA-1611大意:给出一个1—n的排列,每次可以选择一个偶数区间,交换前一半和后一半。用不超过9^6次操作将其变为1—n的顺序。思路: 要注意紫书上的提示,最多只需要2n次操作。也就是说,对每个数,最多只需要两次操作即可归位。那么,一次就将某数字归位是什么情况呢?假设现在我们要将数字m归位,那么数原创 2016-09-27 00:41:09 · 1321 阅读 · 0 评论 -
UVa 11889 Benefit (数学)
大意:给出a,c,求最小的b,使得a和b的最小公倍数为c。思路: 首先,答案不存在的条件只有两种:a大于c或者c不能整除a。 其它条件下有 a * b / gcd(a,b) = c,另m = c / a, 变形得b / gcd(a,b) = m。因为m是已知的,而b又是m的倍数,所以可以通过枚举b来得到答案。#includeusing namespace st原创 2016-09-07 20:33:14 · 457 阅读 · 0 评论 -
UVa 11082 Matrix Decompressing (最大流问题)
题目链接:http://vjudge.net/problem/UVA-11082 题意:构造一个r行c列的矩阵,满足前i行元素之和为Ai,前i列元素之和为Bi。 好巧妙的思路,怎么也想不到是网络流问题,看来还是太菜啊。 设每一行之和为R[i],每一列之和为C[i]。建一个二分图,每行对应一个X结点,每列对应一个Y结点。然后建立源点s和汇点t,原创 2016-10-09 20:18:06 · 401 阅读 · 0 评论 -
UVa 753 A Plug for UNIX (二分图匹配)
题目链接:http://vjudge.net/problem/UVA-753 把设备和插座分别看作二分图的左边和右边的点,则问题转换成了求二分图的最大匹配数。因为一个设备的插头类型可以经转换器变成另一种从而可以接到别的插座上,因此先用一遍Floyd算法求出两个插头间是否可以转化,对于能转化的,即从该设备向该插座连一条边。最后的答案为设备数减最大匹配数。#includ原创 2016-10-09 15:28:48 · 277 阅读 · 0 评论 -
UVa 1232 SKYLINE (线段树区间修改)
题目链接:http://vjudge.net/problem/UVA-1232 大意:有一个序列,开始时全为零。现有一些操作,将区间[l,r)上小于等于c的数全部改为c,求总修改次数。 思路:很容易想到考查的是线段树区间修改,怎么做呢,其实只要对线段树模板的边界代码稍微修改下即可。在进行更新时,如果待更新区间覆盖了当前区间,那么这个当前区间有三种情况:还未进原创 2016-09-19 14:58:48 · 888 阅读 · 2 评论