最大连续子序列(HDU1003,1231)
最大递增子序列和,sum[i]=max(sum[j])+a[i],j
最长公共子序列,LCS经典算法(HDU1159)。
题解:
实际上,我没看出hdu1003和1231的本质差别,形式上的差别就是记载的东西不一样,一个是记载下标,一个是记载元素。基本就是那么回事吧。很多算法书在讨论时效都会拿这个例子来说明,让大家看到算法的力量,从一个弱渣算法到...
分类:
其他好文 时间:
2014-06-03 04:19:10
阅读次数:
279
TSP问题目前有多种解法:搜索解法,动归解法,启发式解法。这里就针对poj 3311问题给出了前两种解法。
搜索解法:这种解法其实就是计算排列子集树的过程。从0点出发,要求遍历1,2,3点后回到0点。以不同的顺序来依次遍历1,2,3点就会导出不同的路径(0->1->2->3->0;0->1->3->2->0等等),总共有3!=6条路径需要考虑,从中选出最短的那条就是所求。搜索解法的时间复杂度为O(n!)。
动归解法:仔细观察搜索解法的过程,其实是有很多重复计算的。比如从0点出发,经过1,2,3,4,5点后回...
分类:
其他好文 时间:
2014-06-02 19:02:01
阅读次数:
436
Common SubsequenceTime Limit: 1000MSMemory Limit:
10000KTotal Submissions: 36542Accepted: 14596DescriptionA subsequence of a
given...
分类:
其他好文 时间:
2014-06-02 00:29:28
阅读次数:
247
LCS问题就是求两个字符串最长公共子串的问题。解法就是用一个矩阵来记录两个字符串中所有位置的两个字符之间的匹配情况,若是匹配则为1,否则为0。然后求出对角线最长的1序列,其对应的位置就是最长匹配子串的位置。下面是字符串21232523311324和字符串312123223445的匹配矩阵,前者为X方...
分类:
其他好文 时间:
2014-05-31 01:33:58
阅读次数:
247
#include
#include
#include
using namespace std;
const int m=(int)1E8;
string s1,s2;
int f[2][5001]={0},g[2][5001]={0};
void init();
void work();
int my_max(int,int);
int main()
{
freopen("lcs.in","r"...
分类:
其他好文 时间:
2014-05-26 04:07:17
阅读次数:
305
出题:在已经排序的数组中,找出给定数字出现的次数;分析:解法1:由于数组已经排序,所以可以考虑使用二分查找确定给定数字A的第一个出现的位置m和最后一个出现的位置n,最后m-n+1就是A出现的次数;使用二分查找可疑快速确定给定数字,但是如果确定其左右范围则比较麻烦,对编码细节要求较高;解法2:Hash...
分类:
其他好文 时间:
2014-05-26 02:54:22
阅读次数:
1285
最长公共子序列问题LCS
问题描述:
一个给定序列的子序列是在该序列中删去若干元素后得到的序列。确切地说,若给定序列X= { x1, x2,…, xm},则另一序列Z= {z1, z2,…, zk}是X的子序列是指存在一个严格递增的下标序列 {i1, i2,…,
ik},使得对于所有j=1,2,…,k有 Xij=Zj。例如,序列Z={B,C,D,B}是序列X={A,B,C,B,D,...
分类:
其他好文 时间:
2014-05-25 06:26:52
阅读次数:
229
题目链接题意:给N,第二行是答案,n个数c1---cn,
代表第一个的顺序是c1,第二个数顺序是c2;下面每一行是学生的答案,格式同上。注意:这个给的顺序需要处理一下,不能直接用。思路:LCS。 1 #include
2 #include 3 #include 4 #include 5 #i...
分类:
其他好文 时间:
2014-05-24 10:02:24
阅读次数:
194
时限:1000ms内存限制:200000K
总时限:3000ms描述一个给定序列的子序列是在该序列中删去若干元素后得到的序列。确切地说,若给定序列X=,则另一序列Z=是X的子序列是指存在一个严格递增的下标序列
,使得对于所有j=1,2,…,k有:Xij = Zj如果一个序列S即是A的子序列又是B的子...
分类:
其他好文 时间:
2014-05-23 05:07:19
阅读次数:
283
题目:Modified LCS
为过此题去仔细研究了下扩展欧几里德算法,领悟了一些精华。
模板为:
void gcd(ll a, ll b, ll& d, ll& x, ll& y)
{
if(!b) {d = a; x = 1; y = 0;}
else{ gcd(b, a%b, d, y, x); y -= x*(a/b);}
}
这里算出来的x,y是对于方...
分类:
其他好文 时间:
2014-05-23 00:26:20
阅读次数:
377