首页 > 其他分享 >寒假训练日志

寒假训练日志

时间:2025-01-12 10:44:05浏览次数:1  
标签:ch 训练 int cin 寒假 str 区间 日志 DP

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';
//	}
	//dp1
	for(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];
					}
				}
			}
		}
	}
	//dp2
	for(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 ans
	memset(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来求解了。

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

标签:ch,训练,int,cin,寒假,str,区间,日志,DP
From: https://www.cnblogs.com/chenzhiyou2009/p/18666756

相关文章

  • 代码随想录训练营第四十五天| 115.不同的子序列 583. 两个字符串的删除操作 72. 编辑
    115.不同的子序列题目链接:115.不同的子序列-力扣(LeetCode)讲解链接:代码随想录 hard确实不好直接说出来粘一下思路:(引自代码随想录)确定dp数组(dptable)以及下标的含义dp[i][j]:以i-1为结尾的s子序列中出现以j-1为结尾的t的个数为dp[i][j]。为什么i-1,j-1这么定义卡哥......
  • golang 单元测试 命令行 日志打印 测试结果打印控制台
    golang单元测试命令行日志打印测试结果打印控制台test.bat@REMgotest-timeout30s-run^TestMultiPong$github.com/jergoo/go-grpc-tutorial/ping@REMgotest-timeout30s-run^TestPing$github.com/jergoo/go-grpc-tutorial/ping@REMgotest-timeout30s-......
  • Label Studio:基于CS架构的一站式多格式数据标注平台,解锁AI训练数据新体验
    LabelStudio是一款强大的开源数据标注工具,支持文本、图像、音频、视频、时间序列等多种格式的标注。它非常适合用来为机器学习模型准备高质量的训练数据,尤其是NLP、计算机视觉和语音任务等领域。LabelStudio的主要功能:多格式支持:文本分类、命名实体识别(NER)图像分......
  • 深度强化学习实战:训练DQN模型玩超级马里奥兄弟
    深度学习作为当前计算机科学领域最具前沿性的研究方向之一,其应用范围涵盖了从计算机视觉到自然语言处理等多个领域。本文将探讨深度学习在游戏领域的一个具体应用:构建一个能够自主学习并完成超级马里奥兄弟的游戏的智能系统。强化学习基础强化学习是机器学习的一个重要分支,研究......
  • 代码随想录算法训练营第4天 | 24. 两两交换链表中的节点,19.删除链表的倒数第N个节点,面
    一、刷题部分1.124.两两交换链表中的节点原文链接:代码随想录题目链接:24.两两交换链表中的节点-力扣(LeetCode)1.1.1题目描述给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。示例1:输......
  • 寒假集训
    Day1前言:为什么今天右眼皮总跳……拜托一定要发生点好事啊作业链接今天的调试:方差:首先,\(update\)没\(return\)。其次,没看到“实数”。最后,推的式子是对的,但统计答案时出错了。怒调半小时(?)线段树合并wiki链接个人感觉与其说是“合并”,不如说是“重叠”顾名思义,......
  • 【漫话机器学习系列】043.提前停止训练(Early Stopping)
    提前停止训练(EarlyStopping)提前停止(EarlyStopping)是一种在训练机器学习模型(尤其是深度学习模型)时常用的正则化技术,用于防止过拟合并提升模型的泛化能力。它通过监控验证集的性能,在性能不再提高或开始下降时终止训练,从而选择性能最佳的模型。工作原理提前停止的基本思想......
  • 日常训练2025-1-11
    日常训练2025-1-11P1091[NOIP2004提高组]合唱队形https://www.luogu.com.cn/problem/P1091思路枚举一条分界线,分界线左边是从左到右求最长上升子序列,分界线右边从右到左求最长上升子序列。然后计算答案即可。代码#include<bits/stdc++.h>typedefstd::pair<long......
  • deeplabv3+街景图片语义分割,无需训练模型,看不懂也没有影响,直接使用,cityscapes数据集_2
    目录1、下载链接1.1、CSDN链接,==含权重文件直接使用==,建议直接下这个,还不限速。1.2Github链接:2、下载代码,下载预训练好的权重3、预测代码4、像素提取,或者说类别提取5、文档部分内容截图6、其他数据处理/程序/指导!!!最近做街景语义分割相关的工作,因为没有gpu训练模型,且......
  • 【Vim Masterclass 笔记09】S06L22:Vim 核心操作训练之 —— 文本的搜索、查找与替换操
    文章目录S06L22Search,Find,andReplace-PartOne1从光标位置起,正向定位到当前行的首个字符b2从光标位置起,反向查找某个字符3重复上一次字符查找操作4定位到目标字符的前一个字符5单字符查找与Vim命令的组合6跨行查找某字符串7Vim的增量查找8Vim搜索的......