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; } 推荐阅读 新鲜无花果的皮能吃吗 阿里斯顿壁挂炉水泵常见故障,以及处理方式? 老主板怎么win11安装教程 8万左右买什么二手车好 八万左右的二手车买什么好 鸡蛋坨子的做法 mongodb设置用户密码 mongodb用户名登录 充电桩多少钱一个 充电桩多少钱一个小时 有哪些很美的词牌名? 请问志高空调看型号哪里才知道是几P的空调?,全方位的了解才便于购买 青枣怎么吃 计划与偏差的纠正 苹果手机录屏没有声音苹果手机录屏没有声音 肚子疼怎么办 孕妈一定要警惕这些疼痛 情感分析论文 vivo云服务密码找回 vivo云找回密码的具体操作 硫酸镁是沉淀吗 硫酸镁是不是沉淀 猎豹是什么科动物 博世洗衣机故障代码e36 博世洗烘一体机故障代码E32 烧苗现象的原因 烧苗现象的原因渗透压 炉石传说神圣法术有哪些 炉石传说20.0神圣法术一览 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