寒假训练日志

1.12

CF49E

CodeForces Link

Difficulty:2300 Tag:区间DP

#include<bits/stdc++.h>
using namespace std;
const int N=60;
string s1,s2;
bool dp1[N][N][30],dp2[N][N][30];
int dp[N][N];
map<int,vector<pair<int,int> > > mp;
int n,len1,len2;
int main(){ios::sync_with_stdio(false);cin.tie(NULL),cout.tie(NULL);cin>>s1>>s2;cin>>n;len1=s1.size(),len2=s2.size();for(int i=1;i<=n;++i){string str;cin>>str;mp[str[0]-'a'].push_back(make_pair(str[3]-'a',str[4]-'a'));}
//	for(int i=0;i<mp['c'-'a'].size();++i){
//		cout<<mp['c'-'a'][i].first<<' '<<mp['c'-'a'][i].second<<'\n';
//	}//dp1for(int i=1;i<=len1;++i){dp1[i][i][s1[i-1]-'a']=1;}for(int l=2;l<=len1;++l){for(int i=1;i<=len1;++i){int j=i+l-1;if(j>len1){break;}for(int ch=0;ch<26;++ch){for(int k=i;k<j;++k){for(int id=0;id<mp[ch].size();++id){dp1[i][j][ch]|=dp1[i][k][mp[ch][id].first]&&dp1[k+1][j][mp[ch][id].second];}}}}}//dp2for(int i=1;i<=len2;++i){dp2[i][i][s2[i-1]-'a']=1;}for(int l=2;l<=len2;++l){for(int i=1;i<=len2;++i){int j=i+l-1;if(j>len2){break;}for(int ch=0;ch<26;++ch){for(int k=i;k<j;++k){for(int id=0;id<mp[ch].size();++id){dp2[i][j][ch]|=dp2[i][k][mp[ch][id].first]&&dp2[k+1][j][mp[ch][id].second];}}}}}//calc ansmemset(dp,0x3f,sizeof(dp));dp[0][0]=0;for(int i=1;i<=len1;++i){for(int j=1;j<=len2;++j){for(int k=1;k<=i;++k){for(int p=1;p<=j;++p){for(int ch=0;ch<26;++ch){if(dp1[k][i][ch]&&dp2[p][j][ch]){dp[i][j]=min(dp[i][j],dp[k-1][p-1]+1);}}}}}}if(dp[len1][len2]<1e9){cout<<dp[len1][len2]<<'\n';}else{cout<<"-1\n";}return 0;
}

一个区间DP的好题,总结以下关键点:

  • 区间DP的一般写法:枚举区间长度,枚举两个端点,枚举其它信息,转移。
  • 在计算对于两个数组的最优解时,不妨考虑从前缀的最优解进行转移,即设 \(dp_{i,j}\) 表示第一个数组前 \(i\) 和第二个数组前 \(j\) 的最优解。
  • 对于两个连续字符变换为一个字符的关系,不妨将其扩展成一段区间变换为一个字符的关系,这样就能愉快的使用区间DP来求解了。

思路如何生成:
首先观察到

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/868091.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据分析之年度总结分享

背景:我们是一家国内的服装公司,在全国拥有几十家服装门店,从事18个服装品类的销售,市场覆盖国内上海、华北、华中、西南、东北、中南、西北七个区域,年销售额达数千万元。财年结束了,老板希望我们(数据分析师)能对公司的销售团队的数据进行分析,并得出结论作为下年度…

国家数据如何统一目录标识、统一身份登记和统一接口

日前,《国家数据基础设施建设指引》发布。最大的看点之一,是全国数据统一大市场:统一目录标识、统一身份登记和统一接口。那么,如何实现数据的全国统一目录标识、统一身份登记和统一接口? 一、全国统一目录标识 建立数据分类标准 顶层设计规划:由国家相关部门牵头,联合各…

信创环境下国产系统不同版本的依赖库都从哪里下载

在Linux系统中安装软件时,可能会遇到各种依赖库问题,以下是一些常见的依赖库问题及其解决方法,以及获取软件依赖包的不同途径。 1、依赖库问题 依赖库版本不兼容:安装软件时,系统提示缺少特定版本的依赖库。 依赖库缺失:软件安装需要某些库文件,但系统中未安装。 依赖冲…

1. 结构光系统标定原理

什么时逆向机法,与双目模型区别?

读量子霸权01硅时代的终结

硅时代的终结1. 量子计算机 1.1. 一种全新型计算机,在处理特定任务时能明显超越普通数字超级计算机1.1.1. 谷歌宣称自己研发的量子计算机Sycamore可以在200秒以内解决世界上最快的数字超级计算机花1万年才能完成的数学问题1.1.1.1. 谷歌的Sycamore量子计算机就是全球第一台实现…

合成橡胶 2025

1月12日: C浪反弹进行中 目前在走C-3

转:celery 常用执行命令

转自:https://blog.csdn.net/weixin_44649870/article/details/105844668celery 常用执行命令详解执行命令celery -A test-1.celery worker -n name-1 --loglevel=info --max-tasks-per-child 500 --autoscale=4,1 -Q q-1常用参数参数 说明-A / --app 要使用的应用程序实例-n …

VMware ESXi 8.0U3c macOS Unlocker OEM BIOS 集成驱动版,新增 12 款 I219 网卡驱动

VMware ESXi 8.0U3c macOS Unlocker & OEM BIOS 集成驱动版,新增 12 款 I219 网卡驱动VMware ESXi 8.0U3c macOS Unlocker & OEM BIOS 集成驱动版,新增 12 款 I219 网卡驱动 VMware ESXi 8.0U3c macOS Unlocker & OEM BIOS 集成网卡驱动和 NVMe 驱动 (集成驱动版…

vue3从入门到入坑-第1坑

这是我2025年入门学习Vue的新年第一个坑啊。先看问题: <template><el-table :data="footerLinks" stripe style="width: 100%"><el-table-column prop="linkName" label="链接名称" width="180" /><e…

OpenVX生命周期

生命周期 1. OpenVX 上下文生命周期 OpenVX上下文的生命周期非常简单,如图2-7所示。图2-7.OpenVX 上下文的生命周期模型 2.图形生命周期 如图2-8所示,OpenVX在图形生命周期中,有以下四个主要阶段。 1)构造:图形通过vxCreateGraph创建,节点通过数据对象连接在一起。 2)验…