首页 > 其他分享 >双序列动态规划

双序列动态规划

时间:2024-08-18 08:57:32浏览次数:6  
标签:int max sum 序列 table 动态 规划 Sum

双序列动态规划

状态定义

往往是$f[n][m]$的二维状态,$n,m$为两个序列的长度

状态转移

往往是与$f[i][j-1]$,$f[i-1][j]$,$f[i-1][j-1]$有关

P1140

$f[i][j]$表示A串$[0,i]$匹配B串$[0,j]$所得最大价值

正解

$f[i][j]=max(f[i][j-1]+table[b[j]]['-'],f[i-1][j]+table[a[i]]['-'],f[i-1][j-1]+table[a[i]][b[j]])$

暴力

若$b[j]$与A串匹配$f[i][j]=max(f[k-1][j-1]+table[a[k]][b[j]]+sum[i]-sum[k])$

否则与空串$f[i][j]=f[i][j-1]+table[b[j]]['-']$

其中$sum[i]$表示A串与空串匹配价值的前缀和

求解目标$f[n][m]$

for(int i=1;i<=n;i++){
	sum[i]=sum[i-1]+t[g(a[i])][g('-')];
}
f[0][0]=0;
for(int i=1;i<=m;i++){
	f[0][i]=f[0][i-1]+t[g(b[i])][g('-')];
	f[i][0]=f[i-1][0]+t[g(a[i])][g('-')];
}
for(int i=1;i<=n;i++){
	for(int j=1;j<=m;j++){
		/*
		f[i][j]=f[i][j-1]+t[g(b[j])][g('-')];
		for(int k=i;k;k--){
			f[i][j]=max(f[i][j],f[k-1][j-1]+t[g(a[k])][g(b[j])]+sum[i]-sum[k]);
		}
		*/
		f[i][j]=max(f[i-1][j-1]+t[g(a[i])][g(b[j])],max(f[i-1][j]+t[g(a[i])][g('-')],f[i][j-1]+t[g(b[j])][g('-')]));
	}
}

P1439

$f[i][j]$表示A串$[0,i]$和B串$[0,j]$的最长公共子序列的长度

如果$a[i]==b[j],f[i][j]=f[i-1][j-1]+1$

否则$f[i][j]=max(f[i-1][j],f[i][j-1])$

求解目标$f[n][m]$

P2758

$f[i][j]$表示将A串$[0,i]$转化为B串$[0,j]$的最小代价

如果$a[i]==b[j],f[i][j]=f[i-1][j-1]$

否则$f[i][j]=min(f[i][j-1],f[i-1][j],f[i-1][j-1])+1$

求解目标$f[n][m]$

for(int i=0;i<=n;i++)f[i][0]=i;
for(int i=0;i<=m;i++)f[0][i]=i;
for(int i=1;i<=n;i++){
	for(int j=1;j<=m;j++){
		f[i][j]=min(f[i][j],f[i-1][j]+1);
		f[i][j]=min(f[i][j],f[i][j-1]+1);
		f[i][j]=min(f[i][j],f[i-1][j-1]+1);
		if(a[i]==b[j])f[i][j]=min(f[i][j],f[i-1][j-1]);
	}
}

P2679

$f[i][j][k]$表示从A串$[0,i]$中取出k个不重叠子串顺次连接,所形成的新字符串与B串$[0,j]$相等

若不选$a[i]$,$f[i][j][k]=f[i-1][j][k]$

若选$a[i]$,$f[i][j][k]=Sum(f[i-t][j-t][k-1])$

所以$f[i][j][k]=f[i-1][j][k]+Sum(f[i-t][j-t][k-1])$

优化:

令$sum[i][j][k]=Sum(f[i-t][j-t][k-1])$

显然,若$a[i]==b[j]$,$sum[i][j][k]=sum[i-1][j-1][k]+f[i-1][j-1][k-1]$

否则$sum[i][j][k]=0$

省略第一维

求解目标$f[m][K]$

注意取模

for(int i=0;i<=n;i++){
	f[0][0]=1;
}
for(int i=1;i<=n;i++){
	for(int j=m;j>=1;j--){
		for(int k=K;k>=1;k--){
			if(a[i]==b[j])sum[j][k]=(sum[j-1][k]+f[j-1][k-1])%mod;
			else sum[j][k]=0;
			f[j][k]=(f[j][k]+sum[j][k])%mod;
		}
	}
}

标签:int,max,sum,序列,table,动态,规划,Sum
From: https://www.cnblogs.com/wertyuio1/p/18365254

相关文章

  • lit动态修改样式
    src/my-counter.ts:import{LitElement,css,html}from"lit";import{customElement,property}from"lit/decorators.js";import{styleMap}from"lit/directives/style-map.js";@customElement("my-counter")expo......
  • 驾驭数据之序:SQL序列的奥秘与实现
    标题:驾驭数据之序:SQL序列的奥秘与实现摘要在数据库管理中,保证数据的有序性和唯一性是至关重要的。SQL序列(Sequence)作为一种强大的数据库对象,为我们提供了一种在不同数据库系统中生成连续数字的手段。本文将深入探讨序列的概念、重要性以及在不同SQL环境中的实现方法。1.......
  • Ruby模板引擎:构建动态视图的艺术
    标题:Ruby模板引擎:构建动态视图的艺术在RubyonRails的世界里,模板引擎是构建动态网页的基石。它们允许开发者将服务器端的逻辑嵌入到HTML中,实现数据的动态展示。本文将深入探讨Ruby中几种常用的模板引擎,包括ERB、Haml和Slim,分析它们的特色、优缺点,并指导如何在项目中做出选......
  • 6.动态vlan指派
    sw3560:ipdhcppoolwepmacnetwork10.1.104.0255.255.255.0default-router10.1.104.254dns-server 10.1.3.241ipdhcppooldyinterfacenetwork10.1.105.0255.255.255.0default-router10.1.105.254dns-server10.1.3.241vlan104namewepmacvlan105name......
  • 以node / link文件表征的道路网络-----dijkstra算法yyds-----基于南京公路公开数据做
    前文已经基于公开数据,获得了南京的全域高速公路的路网数据,这些以node/link文件表征的道路网络不仅延续了osm地图中所包含的经纬度、名称、容量等信息,还包含了一个重要的道路等级字段“link_type_name”。交通部门一般以高速公路、国省干道、城市道路、乡道农路作为区分......
  • netdom 和 PowerShell 的 Add-Computer 命令可以将计算机加入特定的组织单位(OU)。如果
    netdom和PowerShell的Add-Computer命令可以将计算机加入特定的组织单位(OU)。使用 netdom:netdom是一个用于管理Windows域的命令行工具。要将计算机加入到特定的OU,使用以下命令:bashCopyCodenetdomjoin<ComputerName>/domain:<DomainName>/ou:<OUPath>/userd:<Use......
  • 利用Python实现供应链管理中的线性规划与资源优化——手机生产计划1
    目录写在开头1.Python与线性规划的基础2.供应链管理中的资源优化3.利用Python进行供应链资源优化3.1简单的优化实例3.2考虑多种原材料3.3多种原材料、交付时间与物流融合的情况4.规范性分析在供应链管理中的应用价值写在最后写在开头在全球供应链日益复杂的背景......
  • Java的动态代理
    代理模式代理模式给某一个(目标)对象提供一个代理对象,并由代理对象持有目标对象的引用。所谓代理,就是一个对象代表另一个对象执行相应的动作程序。而代理对象可以在客户端和目标对象之间起到中介的作用。代理模式在实际的生活中场景很多,例如中介、律师、代购等行业,都是简单的代......
  • Vue 实现 动态添加Tab 页签及页面缓存功能
    概述在现代Web应用中,Tab页签功能是非常常见的一种交互模式。它可以帮助用户在不同的视图间快速切换,而不会丢失当前视图的状态。为了进一步提升用户体验,我们可以通过keep-alive组件来缓存已经打开的视图,这样即使用户离开并再次回到这个视图,也可以看到之前的状态。本文将......
  • 「代码随想录算法训练营」第四十天 | 动态规划 part13
    647.回文子串题目链接:https://leetcode.cn/problems/palindromic-substrings/文章讲解:https://programmercarl.com/0647.回文子串.html题目难度:中等视频讲解:https://www.bilibili.com/video/BV17G4y1y7z9/题目状态:看题解思路一:动态规划使用一个二维动规数组dp[i][j]来保......