当前位置: 首页 > web >正文

P4290 [HAOI2008]玩具取名 区间dp

题目链接

题目大意

第一行四个整数W、I、N、G。表示每一个字母能由几种两个字母所替代。

接下来W行,每行两个字母,表示W可以用这两个字母替代。

接下来I行,每行两个字母,表示I可以用这两个字母替代。

接下来N行,每行两个字母,表示N可以用这两个字母替代。

接下来G行,每行两个字母,表示G可以用这两个字母替代。

最后一行一个长度不超过Len的字符串。表示这个玩具的名字。

做法

我们把WING映射为1234
区间 d p dp dp,我们用dp [ l ] [ r ] [ k ] [l][r][k] [l][r][k]代表区间[l,r]能否合成k,若可以 d p [ l ] [ r ] [ k ] dp[l][r][k] dp[l][r][k] 1 1 1,否则为0.

我们用三维数组 c h [ i ] [ j ] [ k ] ch[i][j][k] ch[i][j][k]来代表i是否可以由 j , k j,k j,k合成。

这样我们可以用时间复杂度 O ( 4 3 ∗ l e n 2 ) O(4^3*len^2) O(43len2)来解决这题。

具体是枚举断点的时侯枚举三个值 k 1 , k 2 , k 3 k1,k2,k3 k1,k2,k3代表 k 1 k1 k1为左区间合成的数, k 2 k2 k2代表右区间合成的数, k 3 k3 k3枚举 k 1 , k 2 k1,k2 k1k2所能合成的数。

记得先初始化长度为1的区间。

#include<bits/stdc++.h>
using namespace std;
char s[] = "WING";
int a[4];
bool ch[5][5][5];
int Find(char t) {for(int i = 0; i < 4; i++) {if(t == s[i]) return i + 1;}return 0;
}
bool dp[205][205][5];
int main() {string t;for(int i = 0; i < 4; i++) cin >> a[i];for(int i = 0; i < 4; i++) {for(int j = 0; j < a[i]; j++) {cin >> t;ch[i+1][Find(t[0])][Find(t[1])] = 1;}}cin >> t;int n = t.size();for(int i = 0; i < n; i++) dp[i][i][Find(t[i])] = 1;for(int len = 1; len < n; len++) {for(int l = 0; l + len < n; l++) {int r = l + len;for(int k1 = 1; k1 <= 4; k1++) {for(int k2 = 1; k2 <= 4; k2++) {for(int d = l; d < r; d++) {if(dp[l][d][k1] && dp[d+1][r][k2]) {for(int k3 = 1; k3 <= 4; k3++) {dp[l][r][k3] |= ch[k3][k1][k2];}}}}}}}int f = 0;for(int i = 1; i <= 4; i++) {if(dp[0][n-1][i]) cout << s[i-1], f = 1;}if(!f) cout << "The name is wrong!";
}
http://www.xdnf.cn/news/11549.html

相关文章:

  • 8个变态问题VS最终变态答案!!!
  • 自学编程推荐的11个学习及刷题网站
  • 2023年全国青少年信息素养大赛(Python)海南赛区复赛真题
  • STM32H7的LTCD控制学习和应用
  • 【理论+实践】史上最全-论文中常用的图像分割评价指标-附完整代码_分割指标hd95 aorta
  • 2024年最佳Icon图标库推荐,收藏等于学会(2),热门面试
  • 全网最全的Python入门基础教程,超详细。(最新版)
  • .bat批处理命令常用操作
  • HTML做一个简单漂亮的宠物网页(纯html代码)
  • 自增表的自增id的插入(IDENTITY_INSERT)
  • 山寨智能机多采用盗版Windows Mobile系统
  • 神经网络高斯过程 (Neural Network Gaussian Process)
  • oracle translate方法
  • 从零开始Desire HD刷机指南 —— 第六章:要刷机 先root
  • 黑客基地
  • Android和iOS 测试五个最好的开源自动化工具_安卓ios自动化测试工具(1)
  • rtl8139网卡驱动源码解析
  • 阿里云服务器开放端口
  • 爬虫之代理池学习(一)
  • Android-第十二节JSON解析第三方框架Gson,谈一谈Binder的原理和实现一次拷贝的流程
  • 蚂蚁集团智能部研究型实习腾讯大模型实习!
  • 中国高校BBS大全
  • AF_UNSPEC、AF_INET和AF_INET6之间的关系
  • mysql 1061报错_mysql主从 1061 log同步错误处理
  • [转载] SQL习题及答案
  • 分析Win7系统各种版本的区别 你的电脑适合哪个版本?
  • 192. Web前端网页制作 《你的名字》动漫主题网页设计实例 大学生期末大作业 html+css+js
  • C语言程序设计(第四版)—习题10程序设计题
  • Android OpenGL使用GLSurfaceView预览视频
  • 心脏出血(Heartbleed)漏洞浅析、复现