摘要: http://acm.hust.edu.cn:8080/judge/problem/viewProblem.action?id=24022思路:搜索具体看注释。View Code #include<iostream>#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;char s[10][100];int a[10][20];int visit[50];int num[50];int add[50];int cnt=0;int mm=0;void in 阅读全文
posted @ 2012-08-30 21:12 一把刷子 阅读(183) 评论(0) 推荐(0) 编辑
摘要: http://acm.hust.edu.cn:8080/judge/problem/viewProblem.action?id=24020根据一般的字符串的dp,考虑串a的前i个,和串b的前j个那么我们用dp【i】【j】表示包含a串的第i个字母 b串的第j个字母 可以获得的最大长度那么显然有:因为要包含 i j 所以如果abs(a[i]-b[j])<=1 那么dp[i][j]=dp[i-1][j-1]+1; 否则dp[i][j]=0;View Code #include<iostream>#include<string.h>#include<stdio.h& 阅读全文
posted @ 2012-08-30 20:04 一把刷子 阅读(195) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=1463有两种做法,一种是二分图,一种是树形DP,这里两种都做了。二分图的。就是经典的二分图最小点覆盖,要选取最小的点,使得所有的边与这些点关联,(可以一条边关联两个点,为了需要哟)那么我们建的是无向边,因为可以互相关联,还是利用经典的拆点思想,本来要若原图中i与j有边。我们要连的是i到j+n,j到i+n,但这样连的效果和i与j连,j与i连是一样的。所以为了节省空间,我们这样连然后就是匈牙利算法,求最小点覆盖=最大匹配数View Code #include<iostream>#include<string.h>#inc 阅读全文
posted @ 2012-08-30 00:45 一把刷子 阅读(642) 评论(0) 推荐(0) 编辑