hzau华中农业大学第四届程序设计大赛网络同步赛F.LCS 2022-01-04 online 链接:http://acm.hzau.edu.cn/problem.php?id=17 题意:给定两个字符串s,t,和一个数k,求最长公共子序列并且每一段连续的子串长度>=k。 分析:先预处理下分别以s[i]和t[j]为结尾的LCP[i][j],直接dp就行了。 代码: #include #include #include #include #include #include #include #include #include #include #include #include #pragma comment(linker, "/STACK:102400000,102400000") using namespace std; const int N=1000010; const int MAX=1000000100; const int mod=100000000; const int MOD1=1000000007; const int MOD2=1000000009; const double EPS=0.00000001; typedef long long ll; const ll MOD=998244353; const int INF=1000000010; typedef double db; typedef unsigned long long ull; char s[2200],t[2200]; int l[2200][2200],dp[2200][2200]; int main() { int i,j,k,lens,lent; while (scanf("%s%s", s, t)!=EOF) { scanf("%d", &k); lens=strlen(s); lent=strlen(t); for (i=1; i<=lens; i++) for (j=1; j<=lent; j++) if (s[i-1]==t[j-1]) l[i][j]=l[i-1][j-1]+1; else l[i][j]=0; for (i=1; i<=lens; i++) for (j=1; j<=lent; j++) if (l[i][j]==k) dp[i][j]=dp[i-k][j-k]+k; else if (l[i][j]>k) dp[i][j]=max(dp[i-1][j-1]+1,dp[i-k][j-k]+k); else dp[i][j]=max(dp[i-1][j],dp[i][j-1]); printf("%d\n", dp[lens][lent]); } return 0; } 推荐阅读 DATA|数据结构——绪论 有趣的意思,有趣的解释 荔枝蘸酱油什么梗 卷发戴眼镜动漫男主 高铁学生票需要什么证件,学生乘坐高铁需要什么证件才能半价 晒后修复的正确姿势③ 不到24小时测了两次核酸有没有影响 鱼头炖什么最有营养价值 喝的酒能不能带上客车 喝的酒能带上客车吗 8150,8150是指哪里 教师的条件性知识包括 上海个税自助打印地点 上海个人所得税去哪里打印,税务局第二分局 访问redis集群 redis访问所有kv 腹腔镜胆囊切除术|腹腔镜胆囊切除术后发生胆瘘的常见原因及防治措施 嘘,别吵架,听我说! 卷腹和仰卧起坐哪个效果好 舞蹈苏桃抖音直播,抖音直播苏苏叫什么名字 三首托物言志的诗词 托物言志诗 塑料杯底部7是什么 可以装开水吗 尺寸测量软件安卓,怎么用ar测量尺寸? online|hdu4115Eliminate the Conflict online|hdu5955Guessing the Dice Roll online|hdu1816Get Luffy Out * online|hdu3622Bomb Game online|hdu5834Magic boy Bi Luo with his excited tree online|bzoj2286: [Sdoi2011消耗战 online|Codeforces #245 (Div. 2)C. Xor-tree(DFS&&贪心 online|Codeforces Round #316 (Div. 2)D. Tree Requests