自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 资源 (1)
  • 收藏
  • 关注

原创 poj2226 二分图经典建图求最小点覆盖

题意::给出一个N行M列的图,’*’代表稀泥,’.’代表草地,现在要用一些木板把所有的稀泥盖住,但是不能盖住草地。一张木板只能盖住一行或者一列中的一部分,求至少要用多少木板把所有的稀泥盖住。把横向连续的点压在一起作为L,把列向连续的点压在一起作为R,如果两者有交集,就从L到R连一条边。求最小点覆盖(==最大匹配数)#include <cstdio>#include <c...

2018-08-31 23:15:59 449

原创 hdu1054 二分匹配求树的最小点覆盖(无向图)

题意:给定一颗无向树,求最小点覆盖。连通的有向图的情况,将点集copy到L和R集合,建一个二分图,由L集合的点向R集合连一条有向边,这该二分图的最大匹配数就等于最小点覆盖数。连边如(0, 1),则只连L0->R1本题无向图的连边如(0, 1),则要连L0->R1和L1->R0,最小点覆盖数==最大匹配数/2#include <cstdio>#incl...

2018-08-31 22:29:31 469

原创 hdu1083 二分图最大匹配模板

增广路的性质 转自https://blog.csdn.net/ACdreamers/article/details/8621130(1)有奇数条边。 (2)起点在二分图的左半边,终点在右半边。 (3)路径上的点一定是一个在左半边,一个在右半边,交替出现。 (4)整条路径上没有重复的点。 (5)起点和终点都是目前还没有配对的点,而其它所有点都是已经配好对的。 (6)路径上的所有第奇数...

2018-08-31 21:16:03 305

原创 UVALive8138 - Number Generator 概率dp

题意:数字生成器随机生成n种数(1~n),(1<=n<=3000),已经成了k个数,再给出已经生成的k个数。求使得1~n都至少出现2次,还需要生成次数的期望。有t组数据(1<=t<=1e5)朴素做法,dp[i][j]:已经由i个数出现了1次,j个数出现了2次,达到目标状态需要的期望。 复杂度O(n*n*t),tle。 船新思路,将状态设置为与n无关,则只需要一遍n*...

2018-08-28 21:09:17 187

原创 2017-2018 Northwestern European Regional Contest (NWERC 2017) G Glyph Recognition

题意:有6种正多边形(边数为3~8)。给出n个点,求选择哪种正多边形(中心在原点,在x正半轴有一个点),n个点全部在out多边形的外部,全部在in多边形的内部,使得area(out)/area(in)最大。枚举多边形的种类,二分半径更新答案 平面几何,版子多才是王道#include <cstdio>#include <cmath>using namespac...

2018-08-27 23:13:42 303

原创 2017-2018 ACM-ICPC Southeastern European(SEERC 2017) A concerts

题目大意:字符串只由A~Z组成,给定s字符串长度k(k<=300),p字符串长度是n(<=1e5),再给定字母A~Z匹配成功后需要间隔的次数a[27],再给出字符串s, p。求s匹配p的方案数dp[i][j]:匹配到i位置时已经匹配了j个的方案数。 (1) s[j]==p[i]:dp[i][j] = dp[i-1][j] + dp[i-a[id]-1][j-1]; (2) s[...

2018-08-26 19:07:19 682

原创 poj1015 01背包+输出路径

题意:给定人数n(1<=n<=200),每个人有一个a, b。(0<=a<=b),从中选择m个人,使得|sigma(a)-sigma(b)|最小,若相等则sigma(a)+sigma(b)最大。求最优策略的sigma(a),sigma(b)和选择的人的编号dp[i][j]:选择了i个人,|sigma(a)-sigma(b)|==j时sigma(a)+sigma(b)最大...

2018-08-24 18:22:28 489

原创 poj2135 最小费用最大流入门题

题意:给定n个点(编号1~n),有m条无向边。再给出m条边的信息,起点,终点和距离。现在从1走到n,再从n走回1,没条边只能走一次,求这样走的最短路径。将边权作为费用,流量为1(每条边只能走一次)。再新建一个源点s,s到1有一条指向1的有向边,边权为0,流量为2,再建一个汇点t,有一条从n指向t的有向边,边权为0,流量为2。建图完毕,跑费用流最小费用:距离最短,最大流==2(来回)。 (...

2018-08-18 18:20:01 1408

原创 hdu4848 dfs+剪枝

题意:给定n个星球(编号1~n, n<=30),和从每个星球到达每个星球的时间,再给定到达每个星球的截止时间。从星球1出发,遍历2~n个星球,求每个星球的到达时间的总和。PS:每个星球可能不止经过一次!!!dis[i][j]:i到j的最短距离,由floyd预处理 time[i]:到达i星球的时间,初始化-1。ans = sigma(time[i]) (2<=i<=n) 剪...

2018-08-18 11:59:44 140

原创 POJ 2096 Collecting Bugs 概率dp+期望

题目大意:bug由有s个子系统产生,属于n种分类。且由每个子系统产生的概率是1/s,属于某种分类的概率是1/n。每天发现一个bug,求每个子系统都产生了bug且n种bug都有的期望天数。概率dp的状态设置都挺套路:当前状态是…且要达到目标状态的期望值 dp[i][j]:当前状态是已有i种分类,j个子系统产生了bug。 边界:dp[n][s] = 0。 dp[0][0]为所求 状态转移:...

2018-08-16 17:15:59 161

原创 hdu5025 bfs迷宫找最短路径 模范题

题目大意:给定n*n的网络,起点K,终点T,S表示蛇(最多5条,且经过S时,若蛇是活的则时间+1),数字代表钥匙编号(最多m把且必须按照顺序取),每次移动时间+1,求集齐所有钥匙到达终点的最短时间bfs迷宫搜索。 vis记录状态:行,列,蛇是否存活,钥匙的集齐情况。每个状态只被入队一次。#include <cstdio>#include <queue>#i...

2018-08-15 22:19:04 244

原创 poj1258 Number String dp最重要的是思维

题目大意:给定一字符串,如果第i个字符是’I’则第i+1个数比第i个数大,如果是‘D’,则反之。如果是‘?’则可大可小。求满足条件的1~n的排列有多少个。dp:原问题→子问题→状态→转移→边界 dp[i][j]:以j结尾的1~i的排列的答案。 状态转移: ①s[i-1]==’I’,dp[i][j] = ∑dp[i-1][k] (1<=k<=j-1) ②s[i-1]==’D’...

2018-08-13 21:43:31 138

原创 hdu1024 dp+枚举优化+降维

题目大意:给定长度为n的数组(1<=n<=1e6),求其中m个不相交子串的和的最大值dp[i][j]:前i个数(以i结尾,i必取)组成j个不相交子串的答案 状态转移: dp[i][j] = max(dp[i-1][j]+a[i], dp[k][j-1]+a[i]) (1<=k<=i-1) 实现: 降维:假设当前枚举到了打了红圈的状态dp[i][j],那么更新d...

2018-08-13 18:29:48 212

原创 poj2785 二分查找

题目大意:给定n行数(n<=4000),每行4个数。从这4列中,每列选择一个数使其和为0暴力枚举 O(n^4)会tle。 优化:枚举第1,2列算出总和s1[],枚举第3,4列算出总和s2[]。然后枚举s1[],在s2[]中二分查找等于-s1[]的数即可 O(n^2log(n^2))第一次WA:没有认识到,s2[]数组中有相同的数找到一个就++ans。 正解:在s2[]中找到第一个...

2018-08-12 16:29:46 404

原创 poj2784 Buy or Build 最小生成树

题目大意:给定n个城市(1<=n<=1000),c个联通块(0<=c<=8)。再给定c个连通块的信息:包含cnt个点和价格cost,并给出cnt个点的编号。再给定n个城市的坐标。现在要将n个城市连在一起,可以购买联通块也可以新建边(代价是两城市距离的平方)。求最小代价。c较小,可以二进制枚举需要添加那些联通块,然后每次kruskal更新答案#include <...

2018-08-12 15:39:06 231

原创 poj1258 生成树入门

题意:n个点,n*n的矩阵表示边,求最小生成树(1)prim O(n^2)#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 110;const int INF = 0x3f3f3f3f;int g[N][N];...

2018-08-12 14:32:07 284

原创 洛谷P1020 最长不上子序列及其个数

题目大意:输入若干导弹的高度,用炮弹拦截,第一发炮弹能达到任意高度,第i发炮弹不能高于第i-1发炮弹。求一个炮弹系统能拦截的最多的导弹和若要拦截所有的导弹最少需要有多少炮弹系统第一问即求最长不上升子序列的长度 第二问即求最长不上升子序列的个数 而求最长不上升子序列的个数即求最长上升子序列的长度 简单证明:因为在序列中的每一次数据的上升意味着最长不上升子序列有一个新的起点#incl...

2018-08-11 20:45:52 198

原创 洛谷P1437 敲砖块

题目大意:给定n*n的上半个矩阵,每一点表示一个砖块。有敲掉该块砖能得到的相应的分值。对于(i,j)的砖块,若i==1,则可以直接敲掉;若i>1,则必须先敲掉(i-1,j)和(i-1,j+1);现在最多可以敲掉m块砖,求最大得分sum[i][j]:第j列的前缀和 dp[i][j][k]:敲(j, i)的砖块,敲了k次的最大分数 敲掉i+1列的砖和1~i列的砖毛有关系,没有后效性,可以...

2018-08-06 20:17:12 229

原创 CodeForces - 508E_Arthur and Brackets 括号问题(stack)

题目大意:给定括号总数n,再给出每组括号的左右半边的下标相差范围L, R,求满足条件的括号序列,若不存在则输出IMPOSSIBLEpos[i]:第i个括号的左半边的位置 len:当前字符串长度 括号匹配成功的条件:pos[i]+L[i]<=len+1<=pos[i]+R[i];#include <cstdio>#include <stack>...

2018-08-05 13:50:24 215

原创 CodeForces - 920E_Connected Components? 模拟

题目大意:无向图中给定n个顶点,m条不存在的边(除了这m条边,其余都存在),求图的连通分量,及每个连通分量的大小。list < int > g;存储1~n个顶点。再后续的操作中将其分裂成若干块,直到list为空。 (1)当list不为空,清空队列,取队首的一个点入队。 (2)当queue不为空,取一个点,将与其相关的点入队并从list中删除。记录联通块大小。#include...

2018-08-05 13:01:02 311

原创 CodeForces - 722C_Destroying Array 并查集应用

题目大意:给定数组大小n,再给定数组元素(从1~n编号),最后给定数组元素的删除顺序,求执行完每一次删除操作后,数组的最大连续子段和。倒着处理,并查集。 (1)初始化数组为空,倒着加入元素。 (2)每一次加入元素,如果其左右两边也加入过了,就与左或者右边并在一起得到新的数值。当前答案来源于上一次的答案或者本次更新的数值,将两者取最大值即可。//并查集,倒着处理#include &...

2018-08-05 12:17:44 136

原创 Gym - 101572G_Galactic Collegiate Programming Contest 模拟multiset

题目大意:一场比赛的排名依据是过题数多的排名靠前,其次罚时少的排名靠前。一个队伍的排名是k+1,其中k表示有k支队伍优于他。现给定n个队伍,编号1~n,再有m个事件,每个时间是t, p,表示队伍t过了一题,罚时是p。要求输出每个事件后队伍1的排名。因为一个队伍的排名是k+1,所以只需要维护优于他的队伍数量即可。 每个队伍的属性有过题数与罚时,用multiset维护优于队伍1的队伍数。 (1...

2018-08-05 11:58:00 170

原创 CodeForces - 1007A_Reorder the Array 模拟+二分查找

题目大意:给定一个包含n个整数的数组a[],将该数组重排列,若对应位置上的数比原数组的大则++cnt,求最大的cnt;(1)将a[]按不降序排序。vector < int > v;初始化为a[2~n]; (2)如果v的队尾元素<=a[i],则不可能给相应的位置匹配一个大于a[i]的数了。输出cnt并且结束程序。 (3)二分查找v中第一个大于a[i]的位置,如果该位置为v的...

2018-08-04 17:44:49 195

原创 CodeForces - 566D 并查集区间更新优化

题目大意:给定n个人,q个询问。初始状态下,1~n个人独立。接下来q行,每行3个数字type(1,2,3), a, b。如果type==1,则将a和b并在一个集合;如果type==2则将a~b个人并在一个集合;如果type==3,若a和b在一个集合则输出YES,反之输出NO操作2:并查集区间合并优化。 nxt[i]:i的后面第一个不和i在同一集合的元素所在的集合(初始化为i+1)。每次区间(...

2018-08-04 17:22:07 335

原创 CodeForces - 1005D_Polycarp and Div 3 DP

题目大意:给定一行字符串(len<=2e5),将该字符串划分为若干子串,问怎样划分能使对应的整数能被3整除的子串最多,求最多的数量rem:从第一位开始,+每一位再对3取模 dp[i]:前i位能有多少个子串能被3整除 per[3]:最近一次出现模数为i的位置初始化:如果第一位能被3整除,则dp[1]=0;反之,dp[1]=1; 状态转移: (1)先将dp[i]赋一个已经求好的值...

2018-08-04 11:47:32 228

原创 hdu1158_Employment Planning DP

题目大意:给定月数n,给定雇佣一个人的花费hi,每个人一个月的工资sa和开除一个人的花费fi。再给定每个月需要的最少人数num[i]。求每月怎样安排雇佣和开除人,使得n个月的花费最少maxn = max(num[i]); dp[i][j]:第i月雇j个人的花费 初始化:dp[1][i] = i*(hi+fa); 状态转移: (1)如果该月雇佣的人数j>=上月雇佣的人数k:dp[i...

2018-08-04 11:10:29 146

codeforces比赛代码

codeforeces一些比赛代码。

2019-01-26

空空如也

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

TA关注的人

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