【区间dp、字符串处理】P4290 [HAOI2008] 玩具取名 题解

news2024/9/27 7:20:09

前言

毒瘤的字符串杂题

题意

给定 A , B , C , D ( A , B , C , D ≤ 16 ) A,B,C,D(A,B,C,D \leq 16) A,B,C,D(A,B,C,D16) 四个数,依次代表 W I N G 四个字母分别能用哪些含有 W I N G 四个字母且长度为 2 2 2 的字符串表示,如以下输入样例:

1 1 1 1
II
WW
WW
IG
IIII

代表:
每一个 W 可替换为 II,每一个 IN 可以替换为 WW,每一个 G 都可以替换为 IG。最后给定一个字符串 L L L,问 WING 中哪些字母能够通过多次以上的替换变为所求的字符串(长度 n n n 小于 200 200 200),若无则 输出 The name is wrong!

如样例中 IIII->WW->IIIII->WW->N 故输出 IN

思路

显而易见区间dp(tag就是区间dp,问题是如何转移)。

首先对于每一个 A B C D ABCD ABCD 写一个对应的输入。开一个 map P P P表示一个长度为 2 2 2 的字符串可以由那些字母变过来,代码如下:

// 主函数外面
map<string,string>P;
void input(int x,string y) {
	string S;
	for(int i = 1;i <= x;i++) {
		cin >> S;
		P[S] += y;
	}
}

// 主函数输入
scanf("%lld %lld %lld %lld",&a,&b,&c,&d);
input(a,"W"),input(b,"I"),input(c,"N"),input(d,"G");

d p i , j dp_{i,j} dpi,j 表示区间 i i i j j j 可由那些字母变来,则 d p i , i = L i dp_{i,i} = L_i dpi,i=Li

对于每一个长度不小于 2 2 2 的串,可由以下变来:

d p i , k , d p k + 1 , j dp_{i,k},dp_{k+1,j} dpi,k,dpk+1,j ,代表字符串分为 [ i , k ] [i,k] [i,k] [ k + 1 , j ] [k+1,j] [k+1,j] 两个部分。则如果 d p [ i , k ] = I , d p [ k + 1 , j ] = I dp[i,k] = I,dp[k+1,j] = I dp[i,k]=I,dp[k+1,j]=I,则 d p i , j dp_{i,j} dpi,j 中必有 p I I p_{II} pII 这一项:

bool w_1,i_1,n_1,g_1;
void check(string p,string q) {
	int p1 = p.size(),q1 = q.size();
	for(int i = 0;i < p1;i++) {
		for(int j = 0;j < q1;j++) {
			string new_str = p.substr(i,1) + q.substr(j,1);
			new_str = P[new_str];
			if(new_str.find("W") <= new_str.size()) w_1 = true;
			if(new_str.find("I") <= new_str.size()) i_1 = true;
			if(new_str.find("N") <= new_str.size()) n_1 = true;
			if(new_str.find("G") <= new_str.size()) g_1 = true;
		}
	}
} 

在这里插入图片描述

代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
int a,b,c,d;
map<string,string>P;
void input(int x,string y) {
	string S;
	for(int i = 1;i <= x;i++) {
		cin >> S;
		P[S] += y;
	}
}
string L;
int n;
string dp[205][205];
bool w_1,i_1,n_1,g_1;
void check(string p,string q) {
	int p1 = p.size(),q1 = q.size();
	for(int i = 0;i < p1;i++) {
		for(int j = 0;j < q1;j++) {
			string new_str = p.substr(i,1) + q.substr(j,1);
			new_str = P[new_str];
			if(new_str.find("W") <= new_str.size()) w_1 = true;
			if(new_str.find("I") <= new_str.size()) i_1 = true;
			if(new_str.find("N") <= new_str.size()) n_1 = true;
			if(new_str.find("G") <= new_str.size()) g_1 = true;
		}
	}
} 
signed main() {
	scanf("%lld %lld %lld %lld",&a,&b,&c,&d);
	input(a,"W"),input(b,"I"),input(c,"N"),input(d,"G");
	cin >> L,n = L.size();
	L = " " + L;
	for(int i = 1;i <= n;i++) dp[i][i] = L[i];
	for(int i = 2;i <= n;i++) {
		for(int l = 1;l + i - 1 <= n;l++) {
			int r = l + i - 1;
			w_1 = false,i_1 = false,n_1 = false,g_1 = false; 
			for(int k = l;k < r;k++) {
				if(dp[l][k] == "The name is wrong!" or dp[k + 1][r] == "The name is wrong!") continue;
				check(dp[l][k],dp[k + 1][r]); 
				if(w_1 and i_1 and n_1 and g_1) break;
			}
			if(!(w_1 or i_1 or n_1 or g_1)) dp[l][r] = "The name is wrong!";
			if(w_1) dp[l][r] += "W";
			if(i_1) dp[l][r] += "I";
			if(n_1) dp[l][r] += "N";
			if(g_1) dp[l][r] += "G";
		}
	}
	cout<<dp[1][n];
    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

为什么选择GHA文章作为谷歌seo的首选?

选择GHA的文章作为谷歌SEO的首选主要是因为其内容质量和优化策略&#xff0c;GHA专注于高质量的原创内容&#xff0c;这些内容不仅是原创的&#xff0c;还包括了超过3000字的详细信息&#xff0c;通过深入的关键词调研和布局&#xff0c;确保每篇文章都能在发布后迅速被谷歌收录…

JavaScript学习文档(11):Window对象、本地存储、数组中一些方法、学生就业统计表案例

目录 一、Window对象 1、BOM(浏览器对象模型) 2、定时器-延时函数 3、 JS执行机制 &#xff08;1&#xff09;同步任务&#xff1a; &#xff08;2&#xff09;异步任务&#xff1a; 4、location对象 &#xff08;1&#xff09;5秒钟后跳转页面 5、navigator对象 6、…

【uniapp/uview1.x】u-collapse 高度随内容自适应

当 u-collapse-items 中的内容为动态的时候&#xff0c;会发生这种情况&#xff1a; 在 uview 官网中有一个方法可以解决&#xff1a; 具体方法&#xff1a; 在 u-collapse 标签中配置 ref"collapse"&#xff1a; <u-collapse ref"collapse" :item-…

python脚本开头怎么写

在python开发的过程中&#xff0c;脚本开头非常重要。 第一行&#xff1a;告诉操作系统python装在哪里&#xff08;是通过env中查询&#xff0c;然后再调到对应的解析器完成运行&#xff09;。 第二行&#xff1a;是声明文件的编码格式以utf-8。 其他则为这个文件信息&#…

LeetCode49题的反思

Java里的List&#xff08;集合&#xff09;、Array&#xff08;数组&#xff09;、Map&#xff08;字典&#xff09; List<String> L new ArrayList<>();(List是接口&#xff0c;ArrayList是接口的实现类) int[] Y new int[2];(Java命名类型&#xff0c;int[]是个…

如何使用 TortoiseGit(小乌龟)进行分支创建、切换与合并以及解决冲突

&#x1f600;前言 本文将详细介绍如何使用 TortoiseGit&#xff08;小乌龟&#xff09;进行分支创建、切换与合并以及解决冲突等操作。TortoiseGit 是一个广泛使用的 Windows 图形化 Git 客户端&#xff0c;其友好的用户界面和丰富的功能使得 Git 操作变得更加直观和便捷。 &a…

web尝试---信箱

功能 写信&#xff08;增加&#xff09;读信&#xff08;显示所有信件&#xff09; 目录结构 数据库设计 刚开始设计了主键为id&#xff0c;但是后来不想用id这个属性了&#xff0c;但是代码写完了很麻烦不想改了。 感觉我这个id属性设置的简直多余&#xff01;&#xff01…

传知代码-MSA+抑郁症模型总结(三)(论文复现)

代码以及视频讲解 本文所涉及所有资源均在传知代码平台可获取 热门研究领域&#xff1a;情感计算的横向发展 随着社交网络的不断发展&#xff0c;近年来出现了多模态数据的热潮。越来越多的用户采用媒体形式的组合&#xff08;例如文本加图像、文本加歌曲、文本加视频等&…

TypeScript(TS) 自定义绑定快捷键

有很多软件中都可以让用户自定义快捷键 如微信中的快捷键&#xff1a; 思路&#xff1a; 1. 将快捷键分为两部分&#xff1a; a. 主要的键 shift, ctrl, alt, command&#xff1b; b. 非主要的键 字母键、数字键等&#xff1b; 2. 键盘按下事件&#xff1a;比较按键和绑定…

Echarts关系图特效实现

全屏展示 鼠标经过高亮展示 点击其他节点&#xff0c;加载其他节点数据 这个主要利用了echarts的关系图配置。因为需要将相同类型的数据放一起&#xff0c;所以不能实用引力图&#xff0c;引力图虽然效果比较好&#xff0c;而且有动画&#xff0c;但是无法根据同一类型的东西在…

快递时效新视角:‌批量分析派件与签收策略

在快递行业日益竞争的今天&#xff0c;‌时效成为了衡量快递服务质量的重要指标之一。‌对于商家和消费者而言&#xff0c;‌了解快递从到达最后站点到派件以及签收的时效&#xff0c;‌对于优化物流流程、‌提升客户体验具有重要意义。‌本文将介绍如何利用快递批量查询高手软…

17-18 - make 中的路径搜索

---- 整理自狄泰软件唐佐林老师课程 文章目录 1. 常用的源码管理方式1.1 特殊的预定义变量 VPATH&#xff08;全大写&#xff09;1.2 make 对于 VPATH 值的处理方式1.3 vpath&#xff08;全小写&#xff09; 2. 常见问题2.1 问题 12.2 问题 2 1. 常用的源码管理方式 项目中的 …

【化学方程式配平 / 3】

题目 代码 #include <bits/stdc.h> using namespace std; const double eps 1e-8; unordered_map<string, int> e; int eidx, midx; //eidx 元素数&#xff0c; midx 物质数 double matrix[45][45]; int q; bool check_alpha(char c) {if(c > a && c …

这一届单机游戏玩家,都在用云电脑玩《黑神话悟空》

文 | 智能相对论 作者 | 陈泊丞 周五下班&#xff0c;上号玩游戏&#xff0c;突然发现&#xff0c;之前因为电脑配置跟不上&#xff0c;“A”了大半年的游戏亲友竟然在线&#xff1f;&#xff01; “哟&#xff0c;终于舍得配电脑了&#xff1f;&#xff01;”我发消息问道。…

RedisTemplate集成+封装RedisUtil

文章目录 1.项目搭建1.创建一个redis模块2.调整pom.xml&#xff0c;使其成为单独的模块1.sun-common-redis的pom.xml 取消parent2.sun-common的pom.xml 取消对redis模块的管理3.sun-frame的pom.xml 增加对redis模块的管理4.关于只在modules中配置子模块&#xff0c;但是子模块没…

每日OJ_牛客_数据库连接池(简单模拟)

目录 牛客_数据库连接池&#xff08;简单模拟&#xff09; 解析代码 牛客_数据库连接池&#xff08;简单模拟&#xff09; 数据库连接池__牛客网 解析代码 题目解析&#xff1a; 服务器后台访问数据库时&#xff0c;需要先连上数据库&#xff0c;而为了连上数据库&#xf…

数盟IOS端可信ID

一、基本情况介绍 数盟IOS端可信ID介绍页: 数字联盟 数盟号称是还原出原生的IDFA, 但是苹果官网这么介绍&#xff1a; 用户开启跟踪允许跟踪后&#xff0c;APP才可以请求获取IDFA&#xff0c;且用户交互界面允许后&#xff0c;APP才能获取到IDFA. 官网给出的基本架构&#xf…

文章改写神器哪个好用?4款好评不断!

在内容创作中改写文章是少不了的工作&#xff0c;而想要高效率快速的完成改写我们是需要讲究下方法。随着文章改写神器的出现&#xff0c;它已成为了许多创作者在改写文章过程中的得力助手。那么&#xff0c;在众多的选择中&#xff0c;哪些文章改写神器真正好用呢&#xff1f;…

Django+Vue花卉商城系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 需要的环境3.2 Django接口层3.3 实体类3.4 config.ini3.5 启动类3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优质创作者&…

小王陪您考系统规划与管理师之监督管理必考知识点

监督管理必备 1、风险监督的基本方法 风险评估风险审计定期的风险评审差异和趋势分析技术的绩效评估预留管理 2、服务质量的特性 安全性&#xff1a;保密性、完成性、可用性可靠性&#xff08;练完有追吻&#xff09;&#xff1a;连续性、完备性、有效性、可追溯性、稳定性…