09 2013 档案

摘要:题目大意:两串基因进行匹配(可能不一样长,不够就添加空格),任何两碱基之间以及碱基和空格匹配时所得分数已给出,求可以达到的最大分值。动态规划,两串基因存放在a,b数组中,用ans[ i ][ j ]表示a中前 i 个碱基和b中前 j 个碱基配对时的最大分数,则状态转移方程可以写为:ans[i][j]=max( ans[ i-1 ][ j-1 ] + w[ a[i] ][ b[j] ], ans[ i ][ j-1 ] + w[ 5 ][ b[j] ], ans[ i-1 ][ j ]+ w[ a[i] ][ 5 ] ),w数组存放碱基配对时的分数其中空格在第五列和第五行,该方程的意思为:对于a 阅读全文
posted @ 2013-09-26 15:43 贝尔摩德 阅读(190) 评论(0) 推荐(0)
摘要:题目大意:对于图中节点要从起点走向终点,而且能从A节点走向B节点的条件是在B点存在一条到终点的路径,且这条路径的长度小于任何从A节点通往终点路径的长度,求共有几种走法。对于图中限制条件,其实只要判断从B到终点的最短路径是否小于从A点到终点的最小距离,若小于,则可以,否则不可以。经过这样转化后,题目将十分明显,深搜即可,但发现图中节点十分多,最多能达到1000个,所以深搜过程中要用记忆化搜索。#include #include #define INF 2000000 int map[1010][1010],n,m;int low[1010],s[1010];//low存放最短路径,s为标志数组, 阅读全文
posted @ 2013-09-25 23:08 贝尔摩德 阅读(137) 评论(0) 推荐(0)
摘要:题目大意:在一个网格上会出现一些火星人,需要消灭他们,因此要在某些行(或列)安装激光枪,并且该激光枪只能杀死该行(或列)的火星人,在某列(或行)安装一个激光枪会产生花费,总的费用为这些费用的乘积,求把所有火星人都杀死的最小总花费。 相当于选一些行或列覆盖所有图中的火星人顶点,若把火星人视为边,行和列视为顶点,则可以这样构图:引入源汇s,t,对每个行节点,连接s与行节点,容量为在该行建立激光器的费用,连接列节点与汇点t,容量为在该列建立激光器的费用,若在原网格中点(i,j)上有一个火星人,则连接i,j,容量为无穷大INF,则最小割容量即为最小费用。 下面简述一下原因,将原图建立成二分图后,对于. 阅读全文
posted @ 2013-09-23 23:43 贝尔摩德 阅读(204) 评论(0) 推荐(0)
摘要:题目大意:秦始皇修路,要求n个城市连通,然后有一个人可以帮忙修一条不花费的路,这个人希望这条路连接的两个城市的人数总和尽量大,所以要求这条魔法路连接的两个城市人数总和除以秦始皇需要修的路的花费这个值最大。 和求次小生成树的代码很类似,先说一下思路,先求最小生成树,然后枚举每条边当做魔法路,则分子确定了(两个城市人数总和),则只需修建其他路花费最小即可,①若该魔法路是最小生成树里的,则直接去掉即可,②若不是最小生成树里的,则添加魔法路后形成了一个环,只需将环上属于最小生成树的边中最大的那条去掉即可。 然后说明一下为什么其他边必须是最小生成树里的,除魔法路若有不属于mst的边,则把它去掉形成两个. 阅读全文
posted @ 2013-09-19 22:59 贝尔摩德 阅读(170) 评论(0) 推荐(0)
摘要:一. 设无向图G的顶点个数为n,且无孤立顶点,则 ① 设M为G的一个最大匹配,对于G中M的每个未盖点v,选取一条与v关联的边所组成边的集合为N,则W=M∨N为G中的最小边覆盖。 ②设W1为G的最小边覆盖,若G中存在相邻的边就移去其中一条,设移去的边集为N1,则M1=W1-N1为G中的一个最大匹配。 ③边覆盖数+边独立数=n。 二.对于二部图 ①二部图的点覆盖数等于匹配数。 (该定理正确性可从求法上看出,二部图的匹配数可用网络流来做,最大流即最大匹配,而点覆盖数也是用网络流来做,而且建图方式相同,然后求最小割,因为最大流等于最小割,所以原定理成立。) ②点独立数=顶点个数n-匹配数(由二①) 阅读全文
posted @ 2013-09-19 15:03 贝尔摩德 阅读(250) 评论(0) 推荐(0)
摘要:最近在看这一部分的内容,想把定理及自己想的一些证明都整理一下,欢迎指正和补充~~(G为无向图)① 若G中无孤立顶点,则存在一个支配集V1,使得G中除V1外的所有顶点也组成一个支配集。(从某顶点开始,将它标为1,与它相邻的标为2,与2相邻的标为1,标过的不用再标,直到标完,则集合1与集合2满足这一性质)② 若G中无孤立顶点,V1为极小点支配集,则G中除V1外的顶点集合V2也组成一个支配集。 (对于V1中任意顶点,只有两种情况,与V2邻接和不与V2邻接,假设都邻接,那么V2是支配集,得证,假设某顶点x不与V2邻接,则对于V1,若去掉点x,它仍是支配集,与它是极小的矛盾,得证)③一个独立集是极大独立 阅读全文
posted @ 2013-09-16 13:26 贝尔摩德 阅读(384) 评论(0) 推荐(0)
摘要:题目大意:有m个猪圈,每个猪圈都有锁,有n个顾客,每个顾客都有某几个猪圈的钥匙,顾客按先后顺序来,并且每个顾客购买量有一个上限bi,当一个顾客来了后打开一些猪圈,这些猪圈里的猪可以来回调整,问最多能卖出多少猪。网络流问题难在建模,还需多做题多接触建模的方法。将顾客看做节点,引入源汇两点,每个顾客节点与汇点连接一条容量为bi的边,表示购买上限,每个猪圈的第一个打开的顾客节点与源点连接一条容量为该猪圈猪的总数的边,每个猪圈之后再来的人则与第一个顾客连接一条容量为正无穷的边,因为第一个顾客来了后可以调整数量,然后求最大流即可。#include #include #define INF 3000000 阅读全文
posted @ 2013-09-13 21:54 贝尔摩德 阅读(136) 评论(0) 推荐(0)
摘要:题目大意:农场有k个挤奶器,每个挤奶器最多容纳m头奶牛,所有奶牛和挤奶器之间的距离已知,安排奶牛挤奶方案使得所有奶牛中走的最大距离最小化。利用最大流来做,奶牛和挤奶器看做图中节点,先用floyd算出每个节点之间的最小距离,二分最大距离d,然后建图,边长大于d的都去掉,然后建立网络,引入源点和汇点,源点到每个奶牛节点连接一条容量为一的边,挤奶器节点与汇点连接一条容量为m的边,奶牛节点与挤奶器节点间连接容量为一的边(如果之间有边的话),然后求最大流,不断二分。代码为dinic算法#include #include #define MAX 300#define INF 10000000int dis 阅读全文
posted @ 2013-09-07 20:31 贝尔摩德 阅读(150) 评论(0) 推荐(0)