loj 1013(LCS+记忆化搜索)

本文介绍了一种解决字符串匹配问题的方法,通过计算最长公共子序列(LCS)并结合记忆化搜索来找出两个字符串组合的特定长度组合数。首先利用动态规划计算LCS,接着采用记忆化搜索解决组合数问题。

题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=25839

思路:第一小问可以很快求出了,两个字符串的长度-LCS,然后第二问就要记忆化搜索了,dp[i][j][l]表示A串的前i个和B串的前j个组合,长度为l的组合数。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6 #define MAXN 33
 7 #define FILL(a,b) memset(a,b,sizeof(a))
 8 typedef long long ll;
 9 
10 int n,len,len1,len2,dp1[MAXN][MAXN];
11 ll dp2[MAXN][MAXN][MAXN*2];
12 
13 char str1[MAXN],str2[MAXN];
14 int LCS()
15 {
16     FILL(dp1,0);
17     for(int i=1;i<=len1;i++){
18         for(int j=1;j<=len2;j++){
19             if(str1[i-1]==str2[j-1])dp1[i][j]=dp1[i-1][j-1]+1;
20             else dp1[i][j]=max(dp1[i-1][j],dp1[i][j-1]);
21         }
22     }
23     return dp1[len1][len2];
24 }
25 
26 ll dfs(int l1,int l2,int l)
27 {
28     if(dp2[l1][l2][l]!=-1)return dp2[l1][l2][l];
29     else if(l==len)return l1==len1&&l2==len2;
30     else if(l1==len1)return dp2[l1][l2][l]=dfs(l1,l2+1,l+1);
31     else if(l2==len2)return dp2[l1][l2][l]=dfs(l1+1,l2,l+1);
32     else if(str1[l1]==str2[l2])return dp2[l1][l2][l]=dfs(l1+1,l2+1,l+1);
33     return dp2[l1][l2][l]=dfs(l1+1,l2,l+1)+dfs(l1,l2+1,l+1);
34 }
35 
36 
37 int main()
38 {
39     int _case=1;
40     scanf("%d",&n);
41     while(n--){
42         scanf("%s%s",str1,str2);
43         len1=strlen(str1),len2=strlen(str2);
44         len=len1+len2-LCS();
45         FILL(dp2,-1);
46         printf("Case %d: %d %lld\n",_case++,len,dfs(0,0,0));
47     }
48     return 0;
49 }
View Code

 

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值