题意是给出两个字符串,求出最长公共子序列(LSC问题)。dp[i][j]表示的是字符串a从0到i与字符串b从0到j中最长公共自序列的长度。于是dp[i][j]=dp[i-1][j-1]+1(a[i]==b[j])或max(dp[i-1][j],ap[i][j-1])(a[i]=b[j])参考文章:算法笔记p434#include<cstdio>#include<algorithm
原创
2018-04-29 13:18:53
632阅读
1、题目大意我们称序列Z=是序列X=的子序列当且仅当存在严格上升的序列,使得对j=1,2,...,k,有xij=zj。比如Z=是X=的子序
转载
2013-07-31 20:58:00
42阅读
2评论
1、题目大意我们称序列Z=是序列X=的子序列当且仅当存在严格上升的序列,使得对j=1,2,...,k, 有xij=zj。比如Z= 是X=的
原创
2013-07-31 15:42:57
22阅读
1159: Tiling a Grid With DominoesTime Limit: 1 Sec Memory Limit: 128 MB[Submit][Status][Web Board]DescriptionWe wish to tile a grid 4 units high and N units long with rectangles (dominoes
原创
2022-09-07 11:08:00
41阅读
题意:求对字符串最少添加几个字符可变为回文串。分析:简单做法是直接对它和它的逆序串求最长公共子序列长度len。n-len即为所求。(n为原串长度)这样做的原因如下:要求最少添加几个字符,我们可以先从原串中找到一个最长回文串,然后对于原串中不属于这个回文串的字符,在它关于回文串中心的对称位置添加一个相同字符即可。那么需要添加的字符数量即为n-最长回文串长度。最长回文串可以看作是原串中前面和后面字符的一种匹配(每个后面的字符在前面找到一个符合位置要求的与它相同的字符)。这种的回文匹配和原串与逆序串的公共子序列是一一对应的(一个回文匹配对应一个公共子序列,反之亦然),而且两者所涉及到的原串中的字符数
转载
2011-06-24 20:28:00
37阅读
2评论
大致题意:给定一个字符串,添加字符,使该字符串左右对称,求添加字符数最少。设原序列S的逆序列为S' ,则这道题目的关键在于,最少需要补充的字母数 = 原序列S的长度 — S和S'的最长公共子串长度静态数组开销大小为5001*5001的int是铁定超的.据说用short int的话不会MLE,有兴趣的同学可以试试这里重点讲一下滚动数组在这个题目中的应用.自己目前理解的应用滚动数组的目的就是减少空间开销.首先可以在纸上简单模拟一下DP的转移过程.确定好最少行数或者列数之后,重点就是在如何进行"滚动"以及如何用表达式控制这个滚动.对于本题,我用的是行数以0--1-
转载
2013-07-06 21:30:00
37阅读
2评论
http://acm.hdu.edu.cn/showproblem.php?pid=1159直接模板!View Code #include"iostream"using namespace std;char a[1001],b[1001];int c[1001][1001];int Max(int a, int b){ return a>b?a:b;}void LCS(char *aa , char *bb, int x, int y){ int i,j; for(i=0;i<=x;i++) c[i][0]=0; for(j=0;j<=y;j++) c[0
原创
2021-07-28 16:59:32
96阅读
题意:给你一个字符串,问最少加多少个字符可以使之成为回文串。思路:把字符串倒置, 求最长公共子序列, 字符长度
2011-12-17 07:19:48地址:http://acm.hdu.edu.cn/showproblem.php?pid=1159题意:求两个字符串的最长公共字串(LCS)。mark:经典dp。dp[i][j]表示a的前i个字符和j的前i个字符的LCS长度。有dp[i][j] = max(dp[i-1][j-1]+(a[i]==b[j]), dp[i-1][j], dp[i][j-1])。代码:# include <stdio.h># include <string.h>int dp[1010][1010] ;char s1[1010], s2[1010] ;in
转载
2012-01-06 22:11:00
22阅读
// 49424K 750MS G++#include #include using namespace std;#define MAX 5005short DP[MAX][MAX];// int DP[MAX];char stP)); for (in
原创
2023-05-23 16:04:08
59阅读
【POJ 1159】Palindrome 近期各种题各种奇葩思路已经司空见惯了。。。又新出个滚动数组= = 该题另一点须要知道 最少须要补充的字母数 = 原序列S的长度 — S和S’的最长公共子串长度 然而窝原本并不知道……然后写出了一个奇葩dp做法 竟然比LCS快0.0 我的思路是从左往右遍历 每
原创
2022-01-10 16:35:21
41阅读
最少需要补充的字母数 = 原序列S的长度 — S和S'的最长公共子串长度#include #include #define Max(a,b) (a)>(b)?(a):(b)const int maxn = 5000 + 10;char
转载
2013-09-21 12:44:00
38阅读
2评论
#include <iostream> // DP + 滚动数组#include <string>using namespace std;#define MAXN 5005int ans[2][MAXN];int main(){ int n; char s[MAXN]; scanf("%d%s",&n,s); for (int i=n-1;i>=0;--i) // 注意i是从大到小,因为求解ans[i][j]过程需要先知道ans[i+1][j] { for (int j=i+1;j<n;++j) { ...
转载
2011-07-17 23:52:00
44阅读
2评论
Problem Description
A subsequence of a given sequence is the given sequence with some elements (possible none) left out. Given a sequence X = another sequence Z = is a subsequence of X if there e
原创
2022-11-09 21:50:36
74阅读
PalindromeTime Limit: 3000MS Memory Limit: 65536KTotal Submissions: 61160 at is, a string read ide
原创
2022-11-18 16:11:06
38阅读
PalindromeTime Limit:3000MSMemory Limit:65536KTotal Submissions:52543Accepted:18113DescriptionA palindrome is a symmetrical string, that is, a string ...
转载
2015-12-31 12:21:00
18阅读
Common Subsequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 33719 Accepted Submission(s):
转载
2016-07-25 20:58:00
63阅读
2评论
Common SubsequenceProblem DescriptionA subsequence of a given sequence is the given sequence with some elements (possible none) left out. Given a sequence X = another sequence Z = is a subsequence of X if there exists a strictly increasing sequence of indices of X such that for all j = 1,2,...,k,...
转载
2014-03-24 18:00:00
50阅读
2评论
Palindrome
Time Limit: 3000MS
Memory Limit: 65536K
Total Submissions: 53647
Accepted: 18522
Description
A palindrome is a symmetrical string, that is, a string read identically from left t
转载
2017-08-15 16:21:00
36阅读
2评论
Common Subsequence:#include<iostream>
#include<cstring>
using namespace std;
#define M 1000
#define N 1000
int c[M][N];
int lcs_len(char *a,char *b)
{
int m=strlen(a),n=strlen(
原创
2013-08-13 21:59:13
932阅读