自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 收藏
  • 关注

原创 LA3693

题意:在给出的16个数中,求使得满足 x1* 4 + x2* 3 + x3* 2 + x4 = x5 + x6* 2 + x7* 3 + x8* 4 y1* 4 + y2* 3 + y3* 2 + y4 = y5 + y6* 2 + y7* 3 + y8* 4思路: 先将数字进行排序,枚举四位数字,将所有等于temp的状态存入val[temp][i]中,然后判断i & val[temp][j]

2016-03-31 12:31:50 207

原创 LA4621 Cav

题目大意:有一个洞穴,给出每个位置的高度和最深的地方,求出最多可以放多少的水。思路: 由于水面肯定是平的,且水往低处流。 所以从左到右扫描连续的区间和从右到左扫描连续的区间即可。代码:#include <iostream>using namespace std;#include <stdio.h>#include <algorithm>const int INF = 0x3f3f3f3f

2016-03-30 13:00:07 255

原创 LA3716 (单调队列)

题目大意: 有两个长度是n的序列,找出一个[l,r]的区间,这个区间内有不超过%p的数满足A[i] != B[i],问区间长度最长是多少。思路: 计算出从开头到当前位置i有多少个不同的字母。 (i - j) * p >= (sum[i] - sum[j]) * 100 所以 sum[j]* 100 - j * p >= sum[i] * 100 - i *p因此我们要从大到小的顺序进行排序

2016-03-29 23:31:47 397

原创 LA5052

题目大意: 给你两串数字,求出有多少个连续序列可以构成a的子集也可以构成b的子集。思路: 由于是连续的序列 所以只要求出a串中的起点和终点,然后b串的这两个点的距离如果和a的是一样的那么就满足条件。代码:#include <iostream>using namespace std;#include <cstring>#include <stdio.h>int n;const int MA

2016-03-29 22:59:25 333

原创 LA4726(数形结合 & 单调队列)

题目大意: 给出一串数字,求出不小于长度L的平均值最大的序列,如果平均值一样大的话,让序列尽量的短。思路: 参考:浅谈数形结合思想在信息学竞赛中的应用 平均值 ave(i,j) = sum[j] - sum[i - 1]/(j - i + 1),所以相当于求j到i的斜率。 斜率越大平均值就越大。代码:#include <iostream>using namespace std;#incl

2016-03-19 19:34:40 609

原创 LA2963

题意:n个星球上都有一个广播,广播范围是r(和它范围不超过r都可听到广播),广播种类有A和B,如果一个星球可以听到的广播和自身广播不一样的有a个星球,一样的有b个星球,a > b说明这个星球是不稳定的,问给出一个r使不稳定星球尽量多,然后让r尽量少。题解:先把所有星球之间距离计算出来,然后根据距离排序,把所有距离相同的边放到一起计算不稳定星球的数量,找到最大数量星球,然后再更新r。代码:#inclu

2016-03-17 21:32:01 567

原创 LA3621(dfs)

题目大意: 已知n,求x最少经过多少次的乘除法可以使得达到x ^n思路: 因为可以乘除,所以要进行回溯 dfs 用一个num表示当前步数 用step表示最多多少步代码:#include <iostream>using namespace std;#include <cstring>#include <algorithm>#include <stdio.h>const int MAX

2016-03-17 21:02:43 370 1

原创 uva10825 (暴力)

题目大意: 给出m位n进制的数,要求它乘以2~m,求是否存在这样的数,乘以2~m之后得到的数是原来的数组成的数字。思路: 搞了快一小时。。唉。 首先,由于是乘以2~m后都要是原来的数字所组成的,所以假如最后一位是a,那么里面必定存在一位是(2*a)%n 也必定存在一个数属于2~m 乘以a对n求余存在于这m位数当中。 枚举最后一位数,最后一位数肯定位于1~n-1 因为肯定不能超过进制数,也不可

2016-03-17 19:21:48 768

原创 uva10158(并查集)

题目大意: 场战争在 A 国和 B 国之间开始了。作为一位 C 国的好公民,你决定为你的国家秘密的参加 A 国与 B // 国之间的和谈。和谈中还有 n 个人,但你不知道他们分别属于哪个国家。你可以看到他们互相交谈,并能通 // 过观察双方在一对一交谈时的表现猜测他们是敌人还是朋友。 // // 你的国家需要知道某些特定的两个人之间的关系:到底是属于同一国,还是互相敌对,因此需要你在和谈期

2016-03-16 21:00:13 221

原创 uva10608 (并查集)

题目大意: A跟B是朋友,B跟C是朋友。那么A与C也是朋友。 给出朋友的关系,问最多可以有多少个人是朋友思路: 并查集代码:#include <iostream>using namespace std;#include <cstring>#include <stdio.h>#include <queue>int f[30005];int rank[30005];int size[3

2016-03-16 20:43:16 546

原创 uva10594 (无向图的最小费用流)

题目大意: 给出每条边可以承载的最大容量,然后给出连接的边和他们的费用。 求是否可以以最小的费用将指定重量的东西载到对面。思路: 最小费用最大流。 因为是无向图的证明可以来回走, 只要添加从u到v的边再添加从v到u的边就可以了。 有向图中添加反向边的原因是可以反悔走过的路。代码:#include <iostream>using namespace std;#include <cstr

2016-03-16 19:56:32 653

原创 uva10746 (最小费用最大流)

题目大意: 有n所银行,有m辆巡警车,给出巡警车到各个银行所需要的距离,问平均最小的距离是多少。 思路: 最小费用最大流的问题。 构造一个超级源点,然后连接边到各辆巡警车,巡警车与各所银行相连接,容量为1,费用为k。先求出费用最小的路,然后在费用最小的路上增流代码:#include <iostream>using namespace std;#include <cstring>#inc

2016-03-16 19:00:39 286

原创 uva563 (最大流 & 拆点)

题目大意: 有一个n × m的网点状街区,在这个n × m的街区上,有l家银行。有一伙劫匪要去抢银行,抢完以后要跑,他们逃跑的路线不能重叠,逃出n × m的街区边界才算是逃跑成功。给出街区大小和各银行位置,问是否可以全部成功逃脱。思路: 构造一个超级源点,与被抢劫的银行相连接,然后边界与超级汇点相连接,每个十字路口的点都要进行拆点,它们之间的容量为1,因为每个十字路口只能有一个人走,十字路口的点

2016-03-16 18:01:32 390

原创 uva753 (建图 & 最大流)

题目大意: 有n个插座,并有大写字母表示插座的类型。 有m个电器,给出电器的名称以及电器适合的插座类型。 有k个转换器,给出入口类型以及转换后插座的类型。 求最后有几个电器无法插入插座中。思路: 建图。 建立一个超级源点,超级源点到设备的容量为1,如果有重复的要+上,设备与设备所用的插座之间有一条边,容量也为1,如果有重复的也要+上,转换器的插座与插座之间的容量是INF,因为转换器可以有

2016-03-16 16:44:12 319

原创 uva11045(网络流 ,二分图匹配问题)

题目大意: 有一些衣服要发给一些志愿者,每件衣服都有6个码,所以衣服的数量是6的倍数。给出每个志愿者适合的两个码,问每个志愿者是否可以匹配到衣服。思路: 1-6表示衣服,构造一个超级源点0,一个超级汇点 7 + M,构造超级源点到6的容量是N/6,因为每个码数的衣服的数量是N/6,然后构造衣服到人的边,容量为1,因为每个人只能穿一件衣服,然后构造从人到汇点的容量为1,因为每个人只能选择一件衣服。

2016-03-16 13:05:35 279

原创 uva10806 (最小费用最大流)

题意:从1到n 再从n到1 不经过重复的边 ,(如果是点就是旅行商问题了),问最短路思路: 最小费用最大流 建立一个超级源 它的容量为2,到第一个点的费用为0 然后每个连接的点的容量为1 只要找出两条最小费用的路 那么就可以了。代码:#include <iostream>using namespace std;#include <stdio.h>#include <cstring>

2016-03-15 22:07:55 761

原创 uva10330 (最大流 & 超级源点汇点的构建 & EK算法)

题目大意: 题意:一张有向图由n个点构成,每个点都有一个容量限制,然后给出多个源点和多个汇点,两个点之间也是有容量限制的。问最多可以传递多少能量到DHAKA。思路: 第一次做网络流的问题。搞了好久。 首先由于这道题有多个源点和多个汇点,那么就构造一个超级源点和超级汇点。超级源点到每个源点的容量限制都是无穷大,每个汇点到超级汇点的容量限制也是无穷大。 利用bfs去寻找一条增广路径,可以从起点到

2016-03-13 21:59:52 1353 2

原创 uva104 (DP + floyd)

题目大意: 给你两两国家之间的汇率,要求你从任何一个国家出发,身上带着1(单位不明),然后回到这个国家时,身上的钱能够> 1.01.并且如果这样的路径有多条的话,希望的到的是最短的路径,并且还有要求你输出这个最短的路径。思路: 利用DP去求出从i到j中间经过l个国家后所获得的金钱。 那么dp[i][j][1]表示的是从i到j国家之间的汇率, 所以dp[i][j][l] = max(dp[i]

2016-03-13 14:54:39 339

原创 uva515

题目大意就是:   给定一个序列的长度,然后给定若干关系:这个关系是子序列各个元素之和与某个给定整数的大小关系。要求是否存在这样一个序列满足所有给定的若干关系。 本题主要就是需要想到利用前n个元素的和为替代,即设s[i] = a[1] + a[2] + …a[i]。 则a[si] + a[si+1] + … + a[si + ni] = s[si + ni] - s[si - 1];所以如果a[si

2016-03-13 14:17:02 560

原创 uva558

题目大意: n个点,m条边,边给出的信息为:两个端点编号,以及权值,权值可为负数。判断图中是否存在负环。思路: bellmanford判断负环 spaf bfs判断负环代码: SPFA:#include <iostream>using namespace std;#include <stdio.h>#include <cstring>#include <queue>#define

2016-03-13 13:05:15 303

原创 图论 最小生成树 和最短路

https://www.hrwhisper.me/algorithm-graph-dijkstra-spfa-bellmanford-prim-kruskal/

2016-03-10 21:04:12 277

原创 uva10801(最短路问题)

题目大意: 有一层不超过100层的大楼, 有n个电梯,它们的速度都不同。 而且每个电梯只能到达指定的那些楼层,而且它们都有各自的速度(即上升一层或下降一层所用的时间)。 如果一个人在某层走出电梯,要换一个电梯乘,那么他要等60秒(不管要等的是那个电梯,即使是刚刚出来的那个电梯也要等60秒)。在0层搭电梯出发时不需要等待。 一个人从0层开始,目的地是k层, 现在要搭这些电梯,问最少需多少时间。思路

2016-03-10 20:42:47 625 1

原创 uva10099 (floyd & 最大生成树)

题目大意: 有一个导游,要将游客从城市i送到城市j,有的城市之间是有公交车可以直达的,但是公交车是有限制人数的。问导游需要多少趟才能把所有的游客从城市i送到城市j。思路: 其实这道题说白了就是算从城市i到j的路径当中,要找出一条路径的最小值是所有路径最小值当中最大的。 floyd算法: d[i][j] = max(d[i][j],min(d[i][k],d[k][j]));kruskal算法

2016-03-10 19:27:52 487

原创 uva658

题目大意: 首先给出n和m,表示有n个bug和m个补丁。一开始存在n个bug,用1表示一个bug存在0表示不存在,所以一开始就是n个1,我们的目的是要消除所有的bug,所以目标状态就是n个0。对于每个补丁,会给出使用这个补丁的时间,另外会给出两个长度为n的字符串,第一个字符串表示这个补丁适用于什么情况下的bug,第二个字符串表示使用完这个补丁后原来的bug会变成怎么样。先说第一个字符串,s[i]=

2016-03-10 18:41:02 1064 1

原创 uva10369 最小生成树

题目大意: 南极有p个科研站, 要把这些站用卫星或者无线电连接起来,使得任意两个都能直接或者间接相连。任意两个都有安装卫星设备的,都可以直接通过卫星通信,不管它们距离有多远。 而安装有无线电设备的两个站,距离不能超过D。 D越长费用越多。 现在有s个卫星设备可以安装,还有足够多的无线电设备,求一个方案,使得费用D最少(D取决与所有用无线电通信的花费最大的那条路径)。思路: 最小生成树问题,利用

2016-03-10 16:44:57 307

原创 uva10048 (floyd & kruskal)

题目大意: 给出两点和他们之间的噪音值,找出从起点到终点的一条路,使得这条路中噪音最大的是所有路径中最小的。思路: floyd算法: 找出一条路中噪音最大的 例如i和j之间噪音最大值是: d[i][j] = min(d[i][j],max(d[i][k],d[k][j])); 即可能是i直接到j的噪音最大或者i到j的路途中某一段的噪音最大kruskal算法: 由于该算法是按照权值一个一

2016-03-09 22:58:15 345

原创 uva10397 最小生成树

题目大意: 给出n,然后再给出n个点的坐标,要连接着n个坐标,使得总距离最小,但是有m对点已经连接,输入m,和m组a和b表示a和b两点已经连接。思路: 最小生成树 kruskal算法和prim算法 已经链接的两点的权值为0kruskal代码:#include <cstring>#include <stdio.h>#include <iostream>using namespace st

2016-03-09 22:52:30 446

原创 uva10034

题目大意: 给出背上斑点的坐标,求连接这些斑点所用的最少的墨水。思路: 最小生成树代码:#include <iostream>using namespace std;#include <cstring>#include <stdio.h>#include <cmath>#include <algorithm>double x[105],y[105];double dis[5050];

2016-03-09 21:00:28 386

原创 uva567 floyd

题目大意: 首先写出19行,每行包含一个n,后面跟着n个数字,表示行数i与这些数字都是联通的。输完19行之后,后面跟着一个数字m,后面m行包含一个开始s和一个结束e,给出每组数据s到e的最短距离是多少。思路: 利用floyd算法。 floyd算法就是先将每两个之间的值vis[i][j]设为无穷大,如果两个点之间是有联系的就置为1,vis[i][j] =min(vis[i][j],vis[i][

2016-03-09 19:17:14 239

原创 uva10558

转载自别人的题解 题意:一个棋盘,横竖线都是从1到100标号(竖线从左到右标,横线从下到上标),输入n表示有n个被标记的格子,是给出这个格子的左下角坐标,然后输入m,在输入m个数,表示在这些竖线的地方切开棋盘(其实只切了m-2刀,因为2刀必须是1和100,相当于没有),然后输入A,表示你要在横上上切A刀(其实也只是A-2刀,因为2刀必须在横线的1和100)。那么就可以把棋盘很多个大小不一的方块(矩

2016-03-08 23:04:03 247

原创 uva10280

题目大意: 给L升酒,有n个酒瓶,每个酒瓶有个最大容量和最小容量,酒瓶的个数不限。 问最多剩多少毫升酒没有装进去。思路: 完全背包+剪枝 只要问题中含有数量不限且问最多最少问题的都属于完全背包问题。 剪枝 limit=min{min*min/(max-min)}。 对于同一种的瓶子,如果我们用k个瓶子去装酒的话,那么可以装下的酒的范围是[k * min,k max],随着k不断

2016-03-08 21:54:05 254

原创 uva10163 双重dp

代码: 题意:有n个仓库(最多100个),m个管理员(最多30个),每个管理员有一个能力值P(接下来的一行有m个数,表示每个管理员的能力值)每个仓库只能由一个管理员看管,但是每个管理员可以看管k个仓库(但是这个仓库分配到的安全值只有p/k,k=0,1,…),每个月公司都要给看管员工资,雇用的管理员的工资即为他们的能力值p和,问,使每个仓库的安全值最高的前提下,使的工资总和最小。输出最大安全值,并

2016-03-07 16:34:52 296

原创 uva10817

题目大意: 这间学校开设S门课,给出校长已经有的师资n,然后再给出m个应聘者,每门课至少有两名任课老师,求最少需要的雇佣工资。思路: 01背包问题,要嘛选这名老师教这门课要嘛不选。 将状态压缩。 dp[i][k]表示第i种状态第k个应聘者时可以有的最低雇佣工资。 假设有4门功课,每门功课有一个任课老师,表示为00001111,如果第一门有两个任课老师表示为00011110。有两个以上任课老

2016-03-07 16:09:22 803

转载 uva11008 附

感觉这个人写得很不错#include <stdio.h>#include <string.h>#define INF 1000000000#define MAXN 20#define MAXS 1<<18int n,m,c;int x[MAXN],y[MAXN];int s[MAXN][MAXN];int f[MAXS];int dp(int ss){ int count

2016-03-05 13:53:13 271

原创 uva11008

题目大意: 有n棵树,需要砍掉m棵数,可以用一个扫描光朝一个方向射去,那么这个方向直线上的所有树都会被砍掉,问需要最少几个这种光。思路: 位运算 状态压缩 记忆化搜索 要判断三棵树是否在同一斜率上。代码:#include <iostream>using namespace std;#include <stdio.h>#include <cstring>#define N (1 << 1

2016-03-05 13:49:22 233

原创 uva10913

题目大意: 题目大意:给出n,k,然后给出一个n*n的图,从(1,1)通过向下,左和右三个方向,走到(n,n)点,途中不可以走相同的位置,并且路过的位置为负数的个数<= k, 找出一条路使得这条路上的值之和最大。不能到达输出 impossible思路: 给出思维数组dp[i][j][m][n] i,j为点的左边,m为负数的个数,n为走的方向。 进行dfs 记忆化搜索。代码:#include

2016-03-05 12:57:33 202

原创 uva607

题意:有n个主题。每堂课的时间是L。每个主题各要求t1,t2,…tn(1<=ti<=L)。对于每个主题,你要决定要哪堂课教。并且有如下的规则: 1.每个主题必须完整地包含在一堂课里。不能分成两部分教。 2.主题之间的顺序不能调换,即主题i必须在主题i+1之前教。 同时,如果在每堂课的最后如果能留有10分钟以内的时候,那么学生的不满意程序是最小的。不满意程度的计算如下所示: D=0(如果剩下的

2016-03-05 12:18:20 221

原创 uva10118

题目大意: 有4堆糖果,每堆有n(最多40)个,有一个篮子,最多装5个糖果,我们每次只能从某一堆糖果里拿出一个糖果,如果篮子里有两个相同的糖果,那么就可以把这两个(一对)糖果放进自己的口袋里,问最多能拿走多少对糖果。糖果种类最多20种. 思路: 记忆化搜索 用一个h数组来记录在此之前是否有一个单独的糖果i,如果有h数组中的此位置就变成0,如果没有就为1。然后不断的搜索。知道篮子中有5个糖果或者

2016-03-03 13:09:21 617

原创 uva10626(记忆化搜索)

题目大意: 一瓶可乐需要花8元,自动贩售机只收1元,5元,10元。每次插入的钱只能买一瓶。 给出n瓶可乐,请问最少插入几次钱可以买到所需要数量的可乐。思路: 一共有以下几种情况: 8个1元 插入8次 3个1元 一个5元 插入4次 3个1元 一个10元 插入4次 找5元 1个10元 插入1次 找2*1元 2个

2016-03-03 12:52:19 345

原创 uva11151

题目大意: 求出最长的回文串思路: 求字符串正序和逆序的最长公共子序列就是最长的回文串。 注意:空串也是一个回文串 代码:#include <iostream>using namespace std;#include <stdio.h>#include <cstring>char s1[1005];char s2[1005];int dp[1005][1005];int main

2016-03-03 12:05:45 248

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除