上一页 1 ··· 5 6 7 8 9 10 11 12 13 ··· 17 下一页
摘要: 题意: 给你一个DNA序列,求其逆序数。分析: 直接模拟即可。View Code #include<stdio.h>#include<string.h>#include<stdlib.h>struct node{ int xu,ni;}q[101];int cmp(const void*p1,const void*p2){ struct node* c=(node*)p1; struct node* d=(node*)p2; return c->ni-d->ni;}char s[102][55];int n,m;int re(char *s){ 阅读全文
posted @ 2012-04-30 20:24 'wind 阅读(216) 评论(0) 推荐(0) 编辑
摘要: 题意: 有 n 条鱼,雄的会攻击他认为是雌的鱼,一条鱼一旦被攻击,就会生下一定数量的孩子,每条鱼只能被攻击一次, 问最后最多可以生下多少孩子。分析: 因为每条鱼只能被攻击一次,正好符合二分图的性质,此题只要找出完全匹配下的最优匹配即可。模板一:View Code #include<stdio.h>#include<string.h>#define INF 0x1f1f1f1fint sx[101],sy[101];int lx[101],ly[101];char a[102][102];int map[102][102];int link[101];int va[101 阅读全文
posted @ 2012-04-30 18:51 'wind 阅读(261) 评论(0) 推荐(0) 编辑
摘要: 题意: 告诉你有 N 湖是,并告诉你和每个湖相连湖的个数,问你能否找到一种可能的连通方式。分析: 问题的目的就是看看能否重建这个连通图,可以用Havel算法Havel算法的思想简单的说如下:(1)对序列从大到小进行排序。(2)设最大的度数为 t ,把最大的度数置0,然后把最大度数后(不包括自己)的 t 个度数分别减1(意思就是把度数最大的点与后几个点进行连接)(3)如果序列中出现了负数,证明无法构成。如果序列全部变为0,证明能构成,跳出循环。前两点不出现,就跳回第一步!举例说明:4 4 3 3 2 2第二步后0 3 2 2 1 2排完续后3 2 2 2 1 0第二步后0 1 1 1 1 0排完 阅读全文
posted @ 2012-04-30 17:16 'wind 阅读(332) 评论(0) 推荐(0) 编辑
摘要: 题意: 给你一个二叉树,如图:给你一个节点,输出以这个节点为根的最小值和最大值。分析: 经观察可以发现,叶子节点是连续的的奇数,所以只要找到所给节点的数的区间上最小奇数和最大奇数即可。View Code #include<stdio.h>int main(){ int t,n,min,max,lowbit; scanf("%d",&t); while(t--) { scanf("%d",&n); lowbit=(n)&(-n); // 取最后一个 1 min=n-(lowbit-1); // 取得个该区间上的最小奇数。 阅读全文
posted @ 2012-04-30 16:31 'wind 阅读(276) 评论(0) 推荐(0) 编辑
摘要: 题意: 给你一个 n 个人的队列,从中去掉一些人使剩下的人满足 任何一个人可以看到他 至少一侧的所有人。分析: 从前往后 和 从 后往前分别 求一次LIS,然后枚举分割点。View Code #include<stdio.h>#include<string.h>int main(){ int res,n,i,j,tmp; double a[1002]; int dp1[1002]; int dp2[1002]; while(scanf("%d",&n)!=EOF) { for(i=1;i<=n;i++) scanf("%l.. 阅读全文
posted @ 2012-04-28 21:37 'wind 阅读(298) 评论(0) 推荐(0) 编辑
摘要: 题意: 给你 n 个绳子,从里面选出任意根绳子,求最大承受力, 当承受力大的和小的放在一起时,每个绳子的承受力和小的一样,分析: 先对绳子排序,然后求出以每个绳子为最小承受力的绳子的最大值。View Code #include<stdio.h>#include<stdlib.h>int cmp(const void*p1,const void*p2){ return *(int*)p1-*(int*)p2;}int a[10005];int main(){ int t,n,i; scanf("%d",&t); while(t--) { sca 阅读全文
posted @ 2012-04-28 19:58 'wind 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 题意: 给你一个 含有 n 个珠子的项链,规定只有相邻的珠子才能合到一起并得到能量,合到一起的到的新的珠子,可以和其相邻的珠子继续合成,前后次序没有要求, 问你最大能的到多大的能量;分析 :用 dp[i][j]来表示从 i 到 j 合成得到的最大能量,则状态转移方程为 dp[i][j]=max(dp[i][j],dp[i][k]+dp[k][j]+a[i].left*a[k].right*a[j].right) 通过枚举 I 和 J 的分割点来得到 dp[i][j]的最大值。View Code #include<stdio.h>#include<string.h>#de 阅读全文
posted @ 2012-04-27 19:48 'wind 阅读(250) 评论(0) 推荐(0) 编辑
摘要: 题意: 给你个n*n 的位图,让你放大k 倍后输出。分析: 最终图案的每一部分都是有原图相应位置扩大而来,可以用递归实现。View Code #include<stdio.h>#include<math.h>#include<string.h>char a[30][30];char v[3005][3005];int n;void dfs(int k,int x,int y){ int tmp,i,j,tot,l; if(k==1) { for(i=x;i<x+n;i++) for(j=y;j<y+n;j++) ... 阅读全文
posted @ 2012-04-26 23:56 'wind 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 题意: 给你两个字符串,让你找出第一个字符串的头部和第二个字符串尾部重合的部分,并尽可能的长,例如 aasdfs bdevaa 答案为 aa 2分析: 利用 KMP 算法得到的 next 函数的特点,把两字符串连到一起,找出头部和尾部重合的部分。View Code #include<stdio.h>#include<string.h>char s1[50005];char s2[50005];int next[100010];int len1,len2,len;void get(){ int i=0,j=-1; next[0]=-1; while(i<len) { 阅读全文
posted @ 2012-04-26 21:21 'wind 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 题意:给你一个字符串,要求将字符串的全部字符最少循环2次需要添加的字符数。分析: next 数组的巧用。View Code #include<stdio.h>#include<string.h>int next[100005];char b[100005];int len;void get(){ int i=0,j=-1; next[0]=-1; while(i<len) { if(j==-1||b[i]==b[j]) next[++i]=++j; else j=next[j]; }}int main(){ int ... 阅读全文
posted @ 2012-04-26 20:01 'wind 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 题意: 一个字符串,从头到某个位置,字符串的前缀最多重复了多少次。转一相关讲解:kmp next函数 kmp的周期问题,深入了解kmp中next的原理----------------------------------------------k m x j i由上,next【i】=j,两段红色的字符串相等(两个字符串完全相等),s[k....j]==s[m....i]设s[x...j]=s[j....i](xj=ji)则可得,以下简写字符串表达方式kj=kx+xj;mi=mj+ji;因为xj=ji,所以kx=mj,如下图所示------------- -----------... 阅读全文
posted @ 2012-04-26 00:45 'wind 阅读(215) 评论(0) 推荐(0) 编辑
摘要: 题意: 一共有 n 个任务, m 台机器, 知道了每个机器处理每个任务的时间,一个任务只有在处理完之后才能处理其他任务,问你最少需要多少时间, 才能做完所有的任务。分析: 以 任务为 X 集合 第 i 个任务在第 j 台机器 倒数第 k 个完成为 Y 集合,找到完全匹配下的最小权匹配,此题构图方法依然是 拆点。View Code #include<stdio.h>#include<string.h>#define INF 0x1f1f1f#define clr(x)memset(x,0,sizeof(x))int sx[55],sy[2550];int lx[55],l 阅读全文
posted @ 2012-04-24 21:42 'wind 阅读(251) 评论(0) 推荐(0) 编辑
摘要: 分析: 和 poj 1840很像,用poj 的方法跑了960多毫秒,用 lzsz1212 大牛的方法跑了 200多毫秒View Code #include<stdio.h>#include<string.h>int h[2000000];const int di=1000000;int main(){ int p[101]; int i,j,a,b,c,d,sum; for(i=1;i<=100;i++) p[i]=i*i; while(scanf("%d%d%d%d",&a,&b,&c,&d)!=EOF) { 阅读全文
posted @ 2012-04-24 21:26 'wind 阅读(132) 评论(0) 推荐(0) 编辑
摘要: 题意: 给你一个包含 n 个城市的距离,并告诉你其中的一些路的距离,让你用一些环去覆盖所有点,且每个点只能覆盖一次,问环的最小城市多少。分析:每个点只出现一次,而每一个点对应一个入的边和一个出的边,可以将入边放入 X 集合, 出边放入 Y 集合,二分该图,求其完全匹配下的最小权值 匹配。View Code #include<stdio.h>#include<string.h>#define INF 0x1f1f1f#define clr(x)memset(x,0,sizeof(x))int sx[202],sy[202];int lx[202],ly[202];int 阅读全文
posted @ 2012-04-24 17:35 'wind 阅读(182) 评论(0) 推荐(0) 编辑
摘要: 题意: 给你一个图HH. .m. . . . .. . . . .. . . . .mm. .Hm代表人 H 代表房子,一个人只能进一个房子,问你如何安排人进房,使得总步数最小。分析: 可以用最小费用最大流,也可以用二分图最优匹配。#include<stdio.h>#include<string.h>#define min(a,b)(a)<(b)?(a):(b)#define INF 0x1f1f1f#define maxn 105#define clr(x)memset(x,0,sizeof(x))int abs(int x){ return x>0?x: 阅读全文
posted @ 2012-04-24 13:09 'wind 阅读(294) 评论(0) 推荐(0) 编辑
摘要: 题意: 给你 n 个 男的 ,m 女的,男的之间都是相互认识的,女的同样,告诉你一些男女关系,让你找出最多的人使其中任意一个人都相互认识。分析: 同上一题。。。/*独立集:任意两点都不相连的顶点的集合独立数:独立集中顶点的个数完全子图:任意两点都相连的顶点的集合最大完全数:最大完全子图中顶点的个数最大完全数=原图的补图的最大独立数最大独立数=顶点数-最大匹配数这样,就可以求出最大完全数完全图G就是指图G的每个顶点之间都有连边。这样,令完全图G的阶|G|=N,那么完全图G具有如下性质:1.图G有(N-1)*N/2条边。2.图G上的生成树有N^(N-2)种。3.★图G的补图G'中没有边。由 阅读全文
posted @ 2012-04-23 23:35 'wind 阅读(3496) 评论(0) 推荐(0) 编辑
摘要: 题意: 给你 n 个人,和四个条件,两个人只要满足其中任意一个条件就不能成为夫妻, 问从中最多能找出多少人使得他们任意两个人都不可能成为夫妻。分析: 二分图最大独立权集,把男的放到一个集合 ,女的放到另一个几何,二分该图, 如果两个人能成为夫妻,则他们构成一个匹配,找出最大匹配,最大独立全集即为 总人数 - 最大匹配View Code #include<stdio.h>#include<string.h>#define clr(x)memset(x,0,sizeof(x))struct node{ int to,next;}q[200005];int head[505] 阅读全文
posted @ 2012-04-23 22:55 'wind 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 题意: 告诉你 Q 格街区,一共有 M d 个任务分布在这Q 个街区里面,知道了每个任务的开始时间和需要一个人的完成时间, 问最少需要派多少人才能做完所有的任务。分析: 求二分图的最小路径覆盖,分两种情况 ① 两个第 I 个任务和 第 J g个任务在同一街区,如果满足 t[i]+d[i]<=t[j] 那么两个任务构成一个匹配, 即第I 个任务和 第J 个任务可由同一个人先后完成, ②两个任务在不同街区,如果满足 t[i]+d[i]+dis[i][j]<=t[j],那么两任务亦构成一个匹配。 求出最大匹配,最小路径覆盖即为m - 最大匹配 其中每个点之间的最短路径可... 阅读全文
posted @ 2012-04-23 21:12 'wind 阅读(225) 评论(0) 推荐(0) 编辑
摘要: 题意: 给你一个农场 例如*.*..******...*. 其中 *代表障碍物, . 代表空地,你可以用宽度为1 长度不限的木板去覆盖这些障碍,木块可以重叠,问你最少需要多少木块 可以把所有 * 覆盖掉。分析: 二分图最小点权覆盖,这道题建图比较特别,之前的 POJ 3041 是一次覆盖一行或一列,可以 把行看成 X集合, 把列看成是 Y 集合,进行二分图匹配,但是这题每一行或每一列的 障碍物可能是不连续的, 所以要把同一行的各个连续的障碍段分开进行建图,可以把每一行或每一列连续的一段标记成同一个序号,每一个点看成是行这一段的障碍和列这一段障碍的边, 建立关系,最后求... 阅读全文
posted @ 2012-04-23 20:00 'wind 阅读(177) 评论(0) 推荐(0) 编辑
摘要: 题意: 给你一个 n*m 的方格,但是里面有些地方是有洞的,问你能否用1 X 2 的板砖铺满空白的地方, 例如:分析: 二分图匹配,关键在于建图,以奇数格(i+j)%2==1 为一个集合,以偶数格为另一个集合,因为任意一个铺设都是有一个奇数格和一个偶数格构成的, 最后如果匹配的个数是空白格数的一半,即完全匹配,说明能够铺满。View Code #include<stdio.h>#include<string.h>#define clr(x)memset(x,0,sizeof(x))struct node{ int to,next;}q[1000000];int head 阅读全文
posted @ 2012-04-23 17:13 'wind 阅读(158) 评论(0) 推荐(0) 编辑
摘要: DescriptionProfessor Leyni likes to play with LOLIs and he has a lot of LOLIs to manage.For easy management, Leyni numbered them from 1 to n, then arranged some leading relationships between them, such as, x leads y.This relationship is transitive (i.e. if x is the leader of y, y leads z, and then x 阅读全文
posted @ 2012-04-23 12:55 'wind 阅读(229) 评论(0) 推荐(0) 编辑
摘要: 题意: 给你 n 个机器,m 头牛,每台机器最多可供 cap 头牛使用,并告诉你每个物体之间的距离,找出一个距离满足所有的牛都分配到机器且里面走最远的牛 走的距离最小。分析: 用 floyd 计算出每个物体的最短距离,然后二分枚举距离,如果在该距离下满足完全匹配,该距离即为合法距离,匹配用到多重匹配。二分图多重匹配 #include<stdio.h>#include<string.h>#define clr(x)memset(x,0,sizeof(x))int cap;int link[33][202];int vlink[33];int v[33];struct no 阅读全文
posted @ 2012-04-22 13:05 'wind 阅读(236) 评论(0) 推荐(0) 编辑
摘要: 题意: 有 n 牛, m 个 房子, 每个牛都只住在自己想住的房子里面,一个房子只能住一个牛,问最多可以安排多少头牛入住。分析: 求最大匹配。View Code #include<stdio.h>#include<string.h>#define clr(x)memset(x,0,sizeof(x))struct node{ int to,next;}q[40005];int tot;int head[202];void add(int s,int u){ q[tot].to=u; q[tot].next=head[s]; head[s]=tot++;}int link 阅读全文
posted @ 2012-04-22 10:58 'wind 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 题意: 给你N 个球,如果两个球球有重叠部分的话就称这两个球是联通的 ,如果两个球不想交,可以在他们之间建立一个桥梁,使其联通,问最少需要建多少长度的桥梁才能是全部的球联通。分析: 图建好后就是最小生成树问题。View Code #include<stdio.h>#include<string.h>#include<stdlib.h>#include<math.h>int u[5005],v[5005],f[103],r[5005];double w[5005];int cmp(const void*p1,const void*p2){ retu 阅读全文
posted @ 2012-04-22 10:36 'wind 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 题意:给你n 个学生 p 个课程,每一个课程都有一定的学生会选,能否找出p 个学生使他们满足每个学生选的课都不同。分析:看看能否找到一个完全匹配的二分图。View Code #include<stdio.h>#include<string.h>#define clr(x)memset(x,0,sizeof(x))struct node{ int to,next;}q[100000];int head[103];int tot;void add(int s,int u){ q[tot].to=u; q[tot].next=head[s]; head[s]=tot++;}i 阅读全文
posted @ 2012-04-22 09:55 'wind 阅读(128) 评论(0) 推荐(0) 编辑
摘要: 题意: 两台机器,有 k 个工作,每个工作可以在 a 机器的 P模式或在 b 机器的 q 模式下解决,两台机器初始状态为 0 模式,每台机器没变换一次模都要重启一次, 问至少重启多少次可以完成所有工作。分析: 构图方式 if(x*y!=0) g[x][y]=1; 求出最小点覆盖,即找到最少的点来覆盖所有的边。View Code #include<stdio.h>#include<string.h>#define clr(x)memset(x,0,sizeof(x))struct node{ int to,next;}q[100000];int head[102];int 阅读全文
posted @ 2012-04-22 09:13 'wind 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 题意: 给你一些课程和他们的上课时间,求在不冲突的情况下最多能上几节课。分析: 裸的二分图。View Code #include<stdio.h>#include<string.h>#define clr(x)memset(x,0,sizeof(x))struct node{ int to,next;}q[10000000];int tot;int head[303];void add(int s,int u){ q[tot].to=u; q[tot].next=head[s]; head[s]=tot++;}int link[303];int v[100];int f 阅读全文
posted @ 2012-04-22 08:20 'wind 阅读(204) 评论(0) 推荐(0) 编辑
摘要: Description搞ACM不能只局限于看书和刷题,还要把它用到实际工作中,更是要把平时所学用到实际生活中去。下面就是动态规划的经典运用!你追一个MM的时候,需要对该MM身边的各闺中密友都好,这样你追MM这个问题就分解为对其MM朋友的问题,只有把这些问题都解决了,最终你才能追到MM。 该方法适用于聪明的MM,懂得“看一个人,不是看他如何对你,而是看他如何对他人。”的道理,并且对付这样的MM总能得到最优解。 该方法的缺点是开销较大,因为每个子问题都要好好对待。。。。 (如果是MM追GG,可以直接AC。) 所以,需要先把MM的朋友处理好,才能获得最终解。 GG需要获得MM朋友的好感,这样才有利于 阅读全文
posted @ 2012-04-21 23:33 'wind 阅读(439) 评论(0) 推荐(0) 编辑
摘要: Problem DescriptionYou, the leader of Starship Troopers, are sent to destroy a base of the bugs. The base is built underground. It is actually a huge cavern, which consists of many rooms connected with tunnels. Each room is occupied by some bugs, and their brains hide in some of the rooms. Scientist 阅读全文
posted @ 2012-04-21 12:49 'wind 阅读(261) 评论(0) 推荐(0) 编辑
摘要: DescriptionThe 15-puzzle has been around for over 100 years; even if you don't know it by that name, you've seen it. It is constructed with 15 sliding tiles, each with a number from 1 to 15 on it, and all packed into a 4 by 4 frame with one tile missing. Let's call the missing tile ' 阅读全文
posted @ 2012-04-20 20:17 'wind 阅读(183) 评论(0) 推荐(0) 编辑
上一页 1 ··· 5 6 7 8 9 10 11 12 13 ··· 17 下一页