训练指南
HARD_UNDERSTAND
Just try
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
组装电脑 LA 3971 二分答案
题目: 给定电脑的n(n<1000)个配件,每个配件有类型,名字(没用的信息),价格和品质因子。要求每种类型的配件各买一个用于组装电脑,总价格不超过b元。求所有可能的方案中品质因子最差的那个配件的品质因子最大能是多少。 分析: 看着这数据,觉得暴力也可做,枚举每个品质因子,找出满足要求的最大的。但如果数据大一点,就不能这么暴力了,就要二分答案去找最优解了。 具体实现,就是把每种类型的配件都保原创 2016-03-28 22:37:48 · 560 阅读 · 0 评论 -
LA 4731 蜂窝网络(简单dp+贪心)
题意: 手机在蜂窝网络中的定位是一个基本问题,假设蜂窝网络已经得知手机处于c1,c2,,,cn这些区域中的一个,最简单的方法是同时在这些区域中寻找手机,但这样做很浪费带宽,由于蜂窝网络中可以得知手机在这不同区域中的概率,因此一个折中的办法就是把这些区域分成w组,然后依次访问,求最小的访问区域数的期望值。比如,已知手机可能位于5个区域,概率分别是0.3 0.05 0.1 0.3 0.25,w=2,原创 2016-09-05 10:23:40 · 805 阅读 · 0 评论 -
UVa 11584 划分回文串( 简单dp )
题意: 给一个字符串, 要求把它分割成若干个子串,使得每个子串都是回文串。问最少可以分割成多少个。分析: d[i]表示以i结尾的串最少可以分割的串数。 d[i] = min{ d[j]+1, 串[j,i]是回文串&&1<=j<=i } 这题还是很简单的,不过值得学习的地方是预处理[i,j]是否为回文串那部分,代码给出了两种预处理方法。代码:#include<iostream>原创 2016-09-05 10:40:02 · 422 阅读 · 0 评论 -
最短路专题一(dijkstra)
做了一下《训练指南》上的的最短路的例题,贴一下代码,就当是做个备忘录了。如果要看题解,书上写的挺详细的~~ 下面的有些题意和分析是网上搜的,自己太懒了 还有有的题的代码是lrj的,他的代码有注释,读起来容易~~ 题目:https://vjudge.net/contest/135918#overview题目:UVa 11374 题意: 在Iokh市中,机场快线是市民从市内去机场的首选交通工原创 2016-10-10 10:06:37 · 975 阅读 · 0 评论 -
最短路专题二(spfa)
继续上一篇,2道训练指南上的题目题目:UVa 11090 题意: 给定一个n个点m条边的加权有向图,求平均权值最小的回路。分析: 使用二分法求解。对于一个猜测值mid,只需要判断是否存在平均值小于mid的回路。如何判断呢?假设存在一个包含k条边的回路,回路上各条变的权值为w1,w2,….,wk,那么 平均值小于mid意味着w1+w2+….+wk《K*mid,即:(w1-mid)+(原创 2016-10-10 10:24:31 · 508 阅读 · 0 评论 -
UVa 11235 频繁出现的数值(RMQ)
题意: 给一个非降序排列的整数数组a,你的任务是对于一系列询问(i, j),回答ai,ai+1…aj中次数出现最多的值所出现的次数。分析: 由于数列是非降序的,所以所有相等的数都会聚集在一起。这样我们就可以把整个数组进行编码。如-1,1,1,2,2,2,4就可以编码成(-1,1),(1,2),(2,3),(4,1)表示(a,b)数组中的a连续出现了b次。用num[i]表示原数组下表是i的数原创 2016-08-12 21:12:49 · 637 阅读 · 0 评论 -
UVaLive 5713 秦始皇修路(O(n^2)预处理MST的maxcost数组)
题目:https://vjudge.net/contest/135978#overview 题意: 秦始皇要在n个城市之间修筑一条道路使得任意两个城市均可连通。有个道士可以用法力帮忙修一条路。秦始皇希望其他的道路总长B最短且用法术连接的两个城市的人口之和A尽量大,因此下令寻找一个A / B的最大方案。分析: 比较套路的题目 枚举道士修的道路,然后如果可以直接计算出A/B就可以了原创 2016-10-10 21:42:03 · 515 阅读 · 0 评论 -
UVa 11354 Bond (MST 树链剖分 LCA/RMQ)
题目: 题意: 有n座城市通过m条双向道路相连,每条道路都有一个危险系数。你的任务是回答若干个询问,每个询问包含一个起点s和一个终点t,要求找到一条从s到t的路,使得途经所有边的最大危险系数最小。 输入最多包含5组数据。(2 <= n <= 50000 , 1 <= m <= 100000 )。询问有Q个(1 <= Q <= 50000 )。起点编号1~n。分析: 就是求任意两点的原创 2016-10-10 21:55:00 · 373 阅读 · 0 评论 -
最小树形图模板 UVa 11865
最小有向生成树,也叫最小树形图 定义:一个有向图,存在从某个点开始的到达所有的的一个最小生成树,则它就是最小树形图。朱-刘算法求固定根的最小树形图: 1、找到除了root以为其他点的权值最小的入边。用In[i]记录 2、如果出现除了root以为存在其他孤立的点,则不存在最小树形图。 3、找到图中所有的环,并对环进行缩点,重新编号。 4、更新其他点到环上的点的距离,如: 环中的点有(Vk1原创 2016-10-10 22:59:53 · 354 阅读 · 0 评论 -
UVaLive 4043 Ants(二分图最佳完美匹配、KM)
题意: 有n个蚂蚁n棵树,蚂蚁与树要配对,在配对成功的一对之间连一条线段,要求所有线段不能相交。按顺序输出蚂蚁所匹配的树。分析: 二分图完美匹配问题。但是题目中有个线段不相交,怎么办?其实这个最佳完美匹配就是答案了。最佳完美匹配是权值和最大,那么我们就把两两点线段的权值搞成他们距离的负数即可。这样就不可能有相交的了。为什么?因为假设有相交,a1-b2,a2-b1,而dist(a1,b1)+原创 2016-10-12 18:14:06 · 419 阅读 · 0 评论 -
UVa 11419 SAM I AM (最小点覆盖,匈牙利算法)
题目:https://vjudge.net/contest/136139#problem/E 题意: 有一个矩阵中放置的一写东西,然后你有一门炮,每次能横向或纵向开一炮,是这一行所有的东西摧毁。问你最少花多少炮弹摧毁所有的东西?输出一组解分析: 这题是求最小覆盖数,以前做过不出输出方案的 最小覆盖数=最大匹配数 求最大匹配数用匈牙利算法即可 输出最小覆盖集: 从未原创 2016-10-12 22:14:59 · 414 阅读 · 0 评论 -
UVaLive 3415 保守的老师(二分图最大独立集)
题目: 题意: 老师在选择一些学生做活动时,为避免学生发生暧昧关系,就提出了四个要求。在他眼中,只要任意两个人符合这四个要求之一,就不可能发生暧昧。现在给出n个学生关于这四个要求的信息,求老师可以挑选出的最大学生数量。分析: 模型是最大独立集:任意一条边的两边不能同时被选中 最大独立集=结点总数-最大匹配数 Why? 覆盖集:对于每条边,至少一个点被选中 独立集:原创 2016-10-12 22:37:18 · 393 阅读 · 0 评论 -
UVALive 3126 出租车(DAG的最小不相交路径覆盖)
题目:https://vjudge.net/contest/136139#problem/G 题意: 现在有n个客户,他们要乘出租车,他们每个人,有一个出发时间t,起点位置和终点位置。现在要安排尽量少的出租车送他们到目的地。出租车必须在客户出发前至少提前一分钟赶到那个客户出发的位置才行,或者这个客户就是这辆出租车的第一个乘客。让你输出需要的最少的出租车数。分析: 模型是DAG的最小不相交原创 2016-10-12 23:04:22 · 559 阅读 · 0 评论 -
UVA 10817 UVALive 4643 状压dp
这两个题的思想是相似的,可以对比一下。 题目: UVA - 10817 Headmaster’s Headache 题意: 某校有n个教师和m个求职者,已知每人的工资和能教的课程集合,要求支付最少的工资使得每门课都至少有两名教师教学。在职教师必须招聘。分析: d[i][s1][s2]表示考虑到第i个教师以后,可以教授的课程集合是s1和s2,还需要花费的钱?其中s1和s2分别保存某门课原创 2016-09-05 09:04:11 · 292 阅读 · 0 评论 -
UVa 10564 沙漏里的路径(背包思想)
题目:http://acm.hust.edu.cn/vjudge/contest/129795#problem/Q 题意: 要求从第一层走到最下面一层,只能往左下或右下走,经过的数字之和为Sum。问有多少条路径之和刚好等于Sum? 如果有的话,输出起点编号最小且字典序最小的路径。分析: 一道类似01背包的题目,Sum相当于是背包容量,状态表示很容易想到: f[i][j][S]表示从原创 2016-09-04 22:15:34 · 362 阅读 · 0 评论 -
UVa 11859 除法游戏(Nim游戏,质因子)
题意: 有一个n * m的矩阵,每个元素均为2~10000之间的正整数,两个游戏者轮流操作。每次可选一行中的1个或者多个大于1的整数把它们中的每个数都变成它的某个真因子,比如12可以变成1,2,3,4,5.不能操作的输,也就是说,谁在操作之前,矩阵中的所有数是1,则输。题目要求判断第一个人是否能获胜。分析: 考虑每个数包含的素因子的个数,那么让一个数变为它的真因子等价于拿掉他的一个或多个素原创 2016-08-06 16:19:12 · 404 阅读 · 0 评论 -
UVa 10780 幂和阶乘 求n!中某个因子的个数
题意: 输入两个整数m和n(m<5000,n<10000),求最大的整数k使得m^k是n!的约数分析: 显然这题的做法是把m分解质因子,每个质因子的个数是cnt[i],然后求一下n!中m的质因子的个数num[i],那么答案就是ans=min(ans,num[i]/cnt[i])。求n!中某个因子的个数,因为n<10000,所以直接枚举每个数i(i< x)统计即可。const int N=原创 2016-08-07 17:00:07 · 416 阅读 · 0 评论 -
UVa 10892 LCM的个数 (GCD和LCM 质因数分解)
题意: 输入正整数n(n< 2e9),统计有多少对正整数a<=b,满足lcm(a,b)=n?分析: 设n=lcm(a,b)=(p1^r1)* (p2^r2)* (p3^r3)…(pm^rm) 又设a=(p1^a1)* (p2^a2)* ( p3^a3)…(pm^am),b=(p1^b1)(p2^b2)(p3^b3)…(pm^bm) 则由lcm的定义有ri=max{ai,b原创 2016-08-07 20:02:40 · 561 阅读 · 6 评论 -
UVa108 UVa10827 最大连续子矩阵和
UVa 108 题意: 求最大连续子矩阵和 分析: 类似于一维求前缀和一样,用sum[i][j]求一下以(i,j)为右下角端点的矩形的和,然后枚举矩阵的y轴的上下边界,然后扫一遍x轴,找到最小的前缀子矩形,然后当前矩形和sum[i][k] - sum[j][k]减去最小的就是最大的。const int N = 100 + 9;int a[N][N], sum[N][N], r[N], n原创 2016-09-09 16:02:41 · 315 阅读 · 0 评论 -
UVaLive4356 Fire-Control System (扫描法)
题意: 有n个点在平面直接坐标线,给出了n个点坐标,然后问以(0,0)为圆心的扇形包含至少k个点最小面积。分析: 贪心,先把所有点按与x轴正半轴的角度排序,然后选出一个点当半径,枚举剩下点(半径小于第一个点),更新最小面积值。 再求面积的时候,因为要保证扇形区域内有k个点,所以在把所有符合要求的半径的点选出来之后,每次选则一个有k个点的区间范围角度,然后根据这个角度求面积: S原创 2016-09-09 20:42:02 · 350 阅读 · 0 评论 -
UVALive5052 Genome Evolution(想法题)
题意: 给你两个1~n的排列A和B,统计A,B有多少个子集是相等,序列要求连续的,长度要大于1。分析: 记录一下B序列的各个整数的位置,然后在从A开始统计,因为他是集合关系的相等,所以要求长度相同,元素相同,接着枚举长度的同时,又因为我们要求的序列是连续的,所以我们找出位置的最大和最小的位置,然后他们的长度如果和我们枚举的长度相等的话,那么这个显然就是正确的了#include <cstd原创 2016-09-09 20:59:24 · 264 阅读 · 0 评论 -
UVa 11404 回文子序列 LPS
题目:http://acm.hust.edu.cn/vjudge/contest/129795#problem/L 题意: 给定一个由小写字母组成的字符串,删除其中的0个或者多个字符,使得剩下的字母(顺序不变)组成一个尽量长的回文串,如果有多解,输出字典序最小的解思路: 很容易想到的一个做法就是将字符串翻转,然后求正串和反串的最长公共子序列,因为题目要求输出这个序列(字典序最小),用sti原创 2016-09-03 17:04:54 · 368 阅读 · 0 评论 -
LA4256 UVa11552 dp状态设计
这两个题的状态表示是相似的: dp[i][j]都表示第i部分放(j)可以得到的最优解。 状态转移也是相似的: 枚举前一部分和当前部分,根据二者关系转移状态。 LA 4256 题意: 给定一个包含n个点的无向连通图和一个长度为L的序列A,你的任务是修改尽量少的数,使序列中任意两个相邻数或者相同,或者对应图中相邻的两个点。#include<cstdio>#include<cstring原创 2016-09-03 20:19:39 · 450 阅读 · 0 评论 -
UVa 11759 洛克人的难题 状压dp
题意: 你最初只有一个武器,你需要按照一定的顺序消灭n个机器人(n<=16)。每消灭一个机器人将会得到他的武器。每个武器只能杀死特定的机器人。问可以消灭所有机器人的顺序方案总数。分析: 基础的集合dp,我是用f[s][num]表示已经得到武器状态s,已经杀了num个机器人后可以得到的方案总数,然后dfs一下就好,比较简单。#include<iostream>#include<cstring原创 2016-09-03 23:29:13 · 349 阅读 · 0 评论 -
LA 2038 Strategic game(二分图最小顶点覆盖 /树形DP)
题意: 给定一棵树,选择尽量少的点,使得每条边至少有一个点被选中。分析: 做这题的时候看的训练指南上的翻译,想了一下午都不会做,没想到居然翻译是错的~~ 其实这题还是很简单的。是UVa10859放置街灯那题的简化版。 dp[i][j]表示节点i状态是j的最优解(j==1表示被选中,0表示不被选中) 然后在树上搜一遍就好。 状态转移方程: if(j)ans+=mi原创 2016-09-04 21:21:06 · 396 阅读 · 0 评论 -
LA 3530 Martian Mining 简单dp
题意: 给定一个n*m的矩阵, 每个方格中有a矿和b矿, 要求a矿只能从左到右运输, b矿只能从上到下运输, 求最大的运输量分析: 这题还是很好做的,下面是我的代码,不过我写的状态好像复杂了,看到别人还有更简单的状态表示:d[i][j]表示到(i,j)可以得到的最优解。状态转移也比较容易: dp[i][j]=max(dp[i][j-1]+sb[i][j],dp[i-1][j]+sa[原创 2016-09-04 21:46:41 · 413 阅读 · 0 评论 -
UVa 10054 项链(欧拉回路)
题意: 给你n个珠子,一个珠子分为两半有两种颜色,用1到50来表示50种不同的颜色。把这些珠子串起来,两个紧挨着的珠子要满足一个条件就是接触的那部分颜色要相同 例如(1,2)(2,4),两个珠子的接触部分颜色相同都为2。当然,因为珠子最后是连成环的,第一个珠子和最后一个珠子也会接触,也要买满足这个条件 先输入T,有T组数据 输入n,有n个珠子 下面n行每行两个数字表示这个原创 2016-09-17 09:34:04 · 461 阅读 · 0 评论 -
UVa 11324 最大团(强连通分量+dp最长路)
题意: 给一张有向图G,求一个结点数最大的结点集,使得该结点中任意两个结点 u 和 v满足:要么 u 可以到达 v, 要么 v 可以到达 u(u 和 v 相互可达也可以)。分析: 同一个强连通分量中的点要么都选,要么不选。把强连通分量收缩点后得到SCC图,让每个SCC结点的权等于它的结点数,则题目转化为求SCC图上权最大的路径。所以转化成了dp求DAG上的最长路。代码:using nam原创 2016-10-02 22:15:24 · 648 阅读 · 0 评论
分享