自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ZOJ3460 Missile 二分图(拆点)+二分

这个题其实就是n个塔,每个塔最多发射m次火箭,击中m个目标,每个塔只能同时发射一枚火箭准备时间是t1s,发射时间是t2min,注意单位,这块比较坑,然后塔和目标分成两个集合建立二分图,把塔拆点成m个,然后就可以做了,我今天犯得最大的毛病就是全局变量定义m,n之后,在主函数里又定义了,结果出现了问题,输出为最大值,真是无语了#include <iostream>#include <math.h>#

2016-04-28 22:16:07 399

原创 hdu5093Battle ships(二分图)

这个题目刚开始看根本开不出来是二分图,后来问了别人看了题解才搞懂,这个题是按照行和列再加上冰山然后分区域,然后因为行列不能挨着,所以把他们分成两个集合,然后一匹配就出来了#include <iostream>#include <string.h>#include <stdio.h>using namespace std;const int MAXN =60;const int MAXM =

2016-04-27 21:39:03 330

原创 hdu2768Cat VS Dog(最大独立集)

这个题目就是把喜欢猫的和喜欢狗的分开,然后用结构体表示一下喜欢和讨厌,这个地方用的string,方便以后判断相等的地方,把喜欢猫里面不喜欢狗和喜欢狗的相比找一样的,或者喜欢猫里和讨厌猫相比找一样的,然后建边,求最大独立集就是总的点数-最大匹配数#include <iostream>#include <string.h>#include <stdio.h>using namespace std;

2016-04-27 15:20:45 597

原创 hdu5045 Contest(费用流)

这个题目刚开始看没思路,听别人说是费用流,打死也没看出来,后来发现自己傻了,确实很简单,这个题是说n个人,m道题,然后每答完一道题,任意两个人答题的数目的差不能大于1,所以比如说4个人,10个题,那么一定是,前四个题目每人一个,5到8题没人一个,后两个随机,但也必须每人最多做一个,这样的话其实就是跑了m/n+1次费用流,因为要以费用跑最短路,所以要把费用变成其相反数来做,还有就是注意是浮点数,不能硬

2016-04-26 22:05:43 334

原创 poj1141Brackets Sequence(区间dp括号匹配打印路径)

这道题困扰了我一阵,因为之前只会求最大匹配,不会打印路径,后来发现用递归可以实现,首先我们知道前面定义dp [ i ] [ j ] 为串中第 i 个到第 j 个括号的最大匹配数目那么假如我们知道任意 i 到 j 从哪儿插入分点使得匹配添加括号最少。那么我们定义pos【i】【j】表示 i 到 j 从哪儿分开使得匹配添加括号最少,如果i和j匹配我们可以让pos【i】【j】=-1;我们发现在我们之前更新d

2016-04-26 11:29:47 432

原创 51nod1049最大子段和

这是一道子段和的入门问题,非常简单 if(data[i-1]>=0) data[i]=data[i-1]+a[i]; else data[i]=a[i];这就是核心部分,代码如下:#include <iostream>#include <string.h>using namespace std;const int maxn=50005; long long data[maxn],a[maxn

2016-04-25 21:30:09 391

原创 poj2955Brackets区间dp(括号匹配)

首先考虑怎么样定义dp让它满足具有通过子结构来求解、 定义dp [ i ] [ j ] 为串中第 i 个到第 j 个括号的最大匹配数目 那么我们假如知道了 i 到 j 区间的最大匹配,那么i+1到 j+1区间的是不是就可以很简单的得到。 那么 假如第 i 个和第 j 个是一对匹配的括号那么dp [ i ] [ j ] = dp [ i+1 ] [ j-1 ] + 2 ; 那么我们只需要从小到

2016-04-25 20:02:29 491

原创 Codeforces Round #339 (Div. 2) (B 模拟)

这道水题明明不难,然而看错题了,据说这道题用高精度和java大数都是过不去的,一定要注意,数据是十万位,不是小于十万,因为只有一个不美丽数也就是说基本都是0,1,只要把0计数,1超过一次单拿出来,非0非1单拿出来,几乎就没问题了有0的状况,和全都是美丽数的情况要单独考虑一下,哎,还是太菜啊#include <iostream>#include <string.h>using namespace

2016-04-25 18:38:30 248

原创 51nod1083矩阵取数问题

这道题目是51nod教程的第一题,是一道非常简单的题目,之前做过了,再来刷一遍,因为是只能往下或者往右,所以每个点的值为左或上的最大值加自己#include <iostream>#include <string.h>using namespace std;int dp[505][505],a[505][505];int n;int main(){ while(cin>>n)

2016-04-24 20:55:02 742

原创 hdu2444The Accomodation of Students(二分图判断+最大匹配)

这道题虽然是二分图,但我还是用网络流写的#include <iostream>#include <stdio.h>#include <string.h>#include <queue>using namespace std;const int oo=1e9;const int mm=131111;const int mn=999;int node,src,dest,edge,n,m,

2016-04-24 17:50:33 328

原创 南洋理工之导弹拦截(79)

这是一道非常简单的最长上升子序列的题目,然而刚开始没看出来,想错了,用的二维表示这个导弹是否拦截,还是太菜,代码如下#include <iostream>#include <string.h>#include <algorithm>using namespace std;int a[25],b[25];int dp[25];int T,n;int main(){ cin>>T

2016-04-24 10:09:46 523

原创 hdu4751Divide Groups(二分图染色判断)

这个题就是把不认识的连线,然后二分图,这里可能有与两个集合都认识的人,那我们就不必关心他,无所谓的,反正去哪边都行,但是还是得从头开始遍历,为什么会这样呢,因为可能是非连通图,但是和那些和两个集合都认识的人有关吗,答案当然是NO,那么问题到底出现在了哪里呢,比如1-2,3-4表示1和2不认识,3和4不认识,然后你从1开始遍历,发现3,4没遍历到,就是这样#include <iostream>#in

2016-04-22 22:03:44 401

原创 51nod 1022 石子归并 环形+四边形优化

#include <iostream>#include <string.h>#include <stdio.h>using namespace std;int n;int a[2005];int dp[2005][2005],sum[2005][2005],s[2005][2005];//这个地方要注意啊,要开成2nconst int INF=0x3f3f3f3f;void init

2016-04-21 20:03:17 484

原创 poj2594(最小路径覆盖 + floyd)

下面写一下邝斌模板上的东西 1.一个二分图中的最大匹配数等于这个图中的最小点覆盖数 2.最小路径覆盖=点的总和-最大匹配数 3.二分图最大独立集=顶点数-二分图最大匹配 这个题目刚开始我也没想到还要用floyd(传递闭包),后来发现这个题目每个点可以走多次,可能1到2,2到3,这种应该再加一条1到3的边,代码如下#include <iostream>#include <string.h>

2016-04-21 19:52:19 439

原创 51nod多重背包问题

多重背包其实就是把01背包和完全背包写成两个函数然后调用一下就行了,当给的空间大于物品个数*它的容量的时候,那么对于这个物品来说相当于完全背包,反之则为01背包#include <iostream>using namespace std;int v[105],price[105],num[105];long long dp[50005];void Zero_Pack(int value,int

2016-04-20 16:39:04 551

原创 nefu1130Attack monsters(区间dp)

这道题目让我改错误改了很久,但其实就是一道模板题稍稍变了个型,还有一点就是这个题是乱序的,需要排个序 下面是没优化的代码#include <iostream>#include <string.h>#include <stdio.h>#include <algorithm>using namespace std;int n,l;int sum[305];int dp[305][305]

2016-04-20 14:47:07 310

原创 51nod1021石子归并(区间dp)

#include <iostream>#include <stdio.h>#include <string.h>using namespace std;int n;int a[205],sum[205];int dp[205][205];//数组差不多得开大一倍const int INF=0x3f3f3f3f;void init(){ memset(dp,0,sizeof(

2016-04-19 15:06:34 1076

原创 nefu500(二分+最大流)

这道题目是求所走的路线中,费用最大的那条边的值最小,一般说什么最大的最小之类的就应该是二分,其实这个题刚开始没有想到是网络流的,因为费用和流量都有,有点蒙,后来发现件数当流量,然后费用当条件,就ok了#include <iostream>#include <stdio.h>#include <string.h>using namespace std;const int oo=1e9;con

2016-04-18 21:43:29 310

原创 HDU 4411 Arrest 费用流

费用流是每次找最短路然后沿着这条路增广,然后这条路因为增广了,所以就流量为0,相当于不存在了,所以可以继续找最短路,不怕出现重复,然后求的是全图的,这点切记 有n+1个城市,0市为警察局所在城市其中有k个警察,在其他n个城市中,均有小偷。有m条路,每条路有其特定路程,求k个警察将n个城市的小偷全抓捕到0市的最短路程。其中抓小偷必须从1、2、3、、、n按照城市号码严格递增顺序抓。 最小费用流的问

2016-04-17 17:02:57 336

原创 poj1087 A Plug for UNIX 最大流

这道题目是一个比较容易建边的最大流,在一个会议室里有n种插座,每种插座一个,每个插座只能插一种以及一个电器(或者适配器),有m个电器,每个电器有一个插头需要插在相应一种插座上,有k种适配器,每种适配器可以有无限多数量,每种适配器(a, b)可以把b类插座变为a类插座,问最后有多少个电器无法使用,增加一个源点src,一个汇点dest,然后插头和源点相连,电器和汇点相连,容量都为1,需要注意的是(适配器

2016-04-16 23:41:04 301

原创 acdreamoj 1211 有上下界的网络流

这是一道有下届的网络流的题目,刚开始不是很会搞,学了一段时间,其实就是新建立一个源点S和汇点T,然后每条边(u,v),容量是c,最低下限是b,连S 到v和u到T的容量为b的边,之后再连接u到v的容量为c-b的边,最后求的是各边流量,跑一遍最大流,如果等于最低下限和,那么就有可行流#include <iostream>#include <vector>#include <stdio.h>usin

2016-04-14 10:33:52 313

原创 hdu5294(最大流+最短路)Tricks Device

这道题刚开始想了很久,而且之前一直不明白dicnic既然已经求了阻塞流,为什么还需要反向弧呢,现在如图: 2和3是一层,4和5是一层,然后你要是走1->2->4->6的话,如果没有反向弧,你会发现最大流是2,没有增广路了,而当有了反向弧之后,你还可以走1->3->4->2->5->6,以前总听别人说有反向弧,然而一直没找到合适的例子,今天终于让我找到了,非常开心 下面说一下今天这道题,这个题

2016-04-08 22:04:57 640

原创 hdu1561(树形dp+01背包) The more, The Better

这道题目刚开始想了一阵,因为是树形dp专题,所以没看出来是01背包(重点是要倒序),倒序这个点之前一直没想出来是为什么,因为宝物只有一个,和01背包是一样的意思(其实我现在我没太想明白既然已经是二维了,又为什么要倒序呢),状态转移方程是dp[u][j]=max(dp[u][j],dp[u][j-k]+dp[v][k]);,因为我在建树的过程中以0为跟,相当于多攻破了一座堡垒,做以求的是dp[0][m

2016-04-08 21:50:28 332

原创 hdu4289Control(网络流)

这道题目问的是你需要最少布置多少警力,也就是求最小割,最小割即为最大流,那么把相连的边的权值都赋成无穷大,然后拆点,把点权变成两点之间的边权,然后就可以操作了,至于应该怎么连呢 一定要首尾互联,第一个图对,如果按照第二张图的连法,那么就无法构成回路#include <iostream>#include <algorithm>#include <stdio.h>#include <string

2016-04-07 19:22:41 533

原创 hdu4292Food(网络流裸题)

这道题目的意思是:每个人对n种食物有接受或不接受,对饮料也是如此,每个人都要吃食物喝饮料,当然同种食物饮料也可以有多个,现在让你求最多能满足多少人,注意要拆点,因为可能左边一堆食物,右边一堆饮料,某个人都喜欢它们,可能把所有路都连了,应该是三条路,但明明只有一个人,所以说要把一个人拆成两个,然后中间的容量用1表示,代码如下#include <iostream>#include <stdio.h>

2016-04-06 19:37:44 609

原创 hdu1520(poj2342)(树形dp)

这道题的题目和poj2342是一样的,然而数据量比那道题大,导致我那道题直接交到这个上是TLE,然后呢,对于这道题目,应该用链式前向星来写,这里我用的是双向建边,因为只要是有直接关系就不行,那么我可以认为不用管谁是上级,所以可以双向建边,注意当双向建边的时候数据量是原变数的2倍,否则会RE#include <iostream>#include <string.h>#include <stdio.

2016-04-05 19:31:10 372

原创 hdu5379(树形dp)

#include <iostream> #include <cstdio> #include <queue> #include <vector> #include <cstring> #define MOD 1000000007 using namespace std; long long ans; struct node { int id;

2016-04-03 17:05:16 302

原创 uva11478(spfa求负环)

这道题其实和uva11090类似,都是求负环,博主这里继续用spfa来写,需要注意的是,这里需要考虑0环,在一个环里,a边加一个数,b边减相同的数,到最后你会发现总和没变,在这里我想说每个顶点所连的边加减的数值随意,可以不相等#include <iostream>#include <stdio.h>#include <queue>#include <string.h>using namesp

2016-04-03 16:50:13 683

原创 uva11090Going in Cycle!!(最短路spfa)

这道题使我彻底弄明白了spfa为什么最多是n-1个点入队,多一个点入队,就证明是有负环必然,举个栗子 比如说读边的顺序呢是这样的1——5,1——2,2——5,2——3,3——5,3——4,4——5,那么1号点先入队列,然后是5号,和2号入队列,1号出队列,5号点出队列,现在队列里只剩2号点,然后把5号和3号入队,5号出队列,然后把与3号相连的且此时不在队列的5,4入队列,3号出队列,然后5号出

2016-04-01 11:37:50 1014

原创 hdu4786Fibonacci Tree(最小生成树)

博主又犯了别人几乎没犯过的错误,开始MLE,后来RE将近30次,再后来TLE,下面我就来说说弱智错误是怎么形成的,先看一下题意,求一个最小生成树,再求一个最大生成树,然后斐波那契数列打个表,找一下就行了,其实刚开始我纠结在为什么求出了最大和最小,那么中间的数就一定会存在呢,可以这么想,其实我也不知道对不对,就是连的边都为1的点和都为0的点是固定的,那么其他的点既会和边为1的相连,也会和边为0的相连,

2016-04-01 10:44:52 895

空空如也

空空如也

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

TA关注的人

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