题解:SP1703 ACMAKER - ACM (ACronymMaker)

news/2024/10/6 5:59:17/文章来源:https://www.cnblogs.com/cly312/p/18444905

题目大意:

一个有一些单词组成的短语,给定一个缩写词,求此缩写由此短语的单词组成的可能方案数。注意,短语中所有重要的单词都要用到,顺序必须和缩写词单词顺序一致。

思路

动态规划设置:

  • \(dp_{i,j}\):使用前 \(i\) 个重要单词形成前 \(j\) 个缩写字符的方法数。
  • \(dp2_{k,m}\):辅助数组,用于帮助转移,其中 \(k\) 索引当前单词的字符,\(m\) 索引缩写的字符。

转移方程

\(dp2\) 数组转移:

  • \(dp2_{k+1,m+1}\gets dp2{k,m+1}\) 处理当前单词字符不用于匹配当前缩写字符的情况。
  • \(dp2_{k+1,m+1}\gets dp2_{k+1,m+1}+dp2_{k,m}\),处理当前单词字符匹配当前缩写字符的情况。

\(dp\) 数组转移:

  • \(dp_{i+1,j+k}\gets dp{i+1,j+k}+dp_{i,j} \cdot dp2_{size,k}\),考虑使用当前单词匹配缩写的所有方式。

代码:

#include<bits/stdc++.h>
#define wrhlovezcx true
using namespace std;
int main(){while(wrhlovezcx){int n;cin>>n;if(n==0) return 0;set<string> ig;for(int i=0;i<n;i++){string s;cin>>s;ig.insert(s);}while(wrhlovezcx){string acm;cin>>acm;cin.ignore();string phrase;getline(cin,phrase);if(phrase=="CASE") break;istringstream iss(phrase);vector<string> words;while(wrhlovezcx){string word;iss>>word;if(word=="") break;if(ig.find(word)==ig.end()){words.push_back(word);}}int dp[151][151];memset(dp,0,sizeof(dp));dp[0][0]=1;int dp2[151][151];for(int i=0;i<words.size();i++){for(int j=0;j<acm.length();j++){int mx=min(acm.length()-j,words[i].length());for(int k=0;k<=words[i].length();k++){dp2[k][0]=1;}for(int k=1;k<=mx;k++){dp2[0][k]=0;}for(int k=0;k<words[i].length();k++){for(int m=0;m<mx;m++){dp2[k+1][m+1]=dp2[k][m+1];if(words[i][k]==tolower(acm[j+m])){dp2[k+1][m+1] += dp2[k][m];}}}for(int k=1;k<=mx;k++){dp[i+1][j+k]+=dp[i][j]*dp2[words[i].length()][k];}}}if(dp[words.size()][acm.length()]==0){cout<<acm<<" is not a valid abbreviation"<<endl;}else{cout<<acm<<" can be formed in "<<dp[words.size()][acm.length()]<<" ways"<<endl;}}}
}

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

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

相关文章

04-论说文:审题与立意(1)

命题作文 比较开放 近义词 相关性 竞争 合作 竞争合作 ==》 竞争合作的关系 概率==》风险 风险 利益 审题 较难

pycharm 拆分窗口, 取消分屏; VS code 分屏

Split Vertically 或者 Split Horizontally 可以把当前编辑窗口垂直或者水平拆分成两个。 Split Vertically或者Split Horizontally可以把当前编辑窗口垂直或者水平拆分成两个。 取消拆分窗口: VS code 分屏:

南沙C++信奥赛陈老师解一本通题 1966:【14NOIP普及组】比例简化

​【题目描述】在社交媒体上,经常会看到针对某一个观点同意与否的民意调查以及结果。例如,对某一观点表示支持的有 1498 人,反对的有 902 人,那么赞同与反对的比例可以简单的记为1498:902。 不过,如果把调查结果就以这种方式呈现出来,大多数人肯定不会满意。因为这个比例…

pycharm 拆分窗口 pycharm怎么分屏,取消分屏

Split Vertically 或者 Split Horizontally 可以把当前编辑窗口垂直或者水平拆分成两个。 Split Vertically或者Split Horizontally可以把当前编辑窗口垂直或者水平拆分成两个。 取消拆分窗口:

三维激光扫描技术在文保修缮项目中的应用

三维激光扫描技术作为一种新兴的高精度空间数据获取手段,其在文物保护和修缮项目中的应用日益广泛。这项技术通过快速获取物体表面的三维密集点云数据,为文物的数字化存档、保护、修复及再利用提供了强有力的技术支持。 数据采集:高精度与非接触性三维激光扫描技术通过激光测…

土地规划与区域经济发展:筑基均衡未来的战略经纬

在新时代背景下,土地规划不仅是空间布局的艺术,更是推动区域经济均衡发展的关键引擎。土地资源的合理配置对于激发区域潜能、促进经济结构优化有着重要意义。本文将深入剖析土地规划如何成为促进区域经济均衡发展的强大动力。一、土地规划与区域经济的内在联系土地是经济社会…

【api安全】发展趋势与防护方案

原创 让数据更安全 德斯克安全小课堂近期, 全球知名IT咨询和调研机构Gartner 在 API 安全方面的两位分析师Mark ONeill和Dionisio Zumerle,合作举办了一场主题为“如何保护API免受攻击和数据泄露”的网络研讨会。这次会议分享的内容,对于正在探寻API安全保护方案的安全人员来…

找到一个数最接近的比它大的2的n次幂的代码分析

pub fn f1(mut n: u32) -> u32 {n = n | (n >> 1);n = n | (n >> 2);n = n | (n >> 4);n = n | (n >> 8);n = n | (n >> 16);n }如果n的输入类型为 u32(32位无符号整型), 上述代码的结果为大于等于n的2^k - 1的值(因为可能会出现溢出,所…

《如 何 速 通 一 套 题》8.0

邮寄 开场秒 B。 A 稍微退了一会儿,推出一个解法(后面发现假掉了)...... 然后 CD,D 感觉是一个 SA。结果 SA 写错了,算法假掉了...... A 智乃的差分 分类讨论。 \(x > 0\) 最大值 \(= x\),最小值 \(= 0\) 此时可以直接找一个不是 \(x\),不是 \(0\) 的数来(严格次小值…

Orchestre symphonique de Montréal,Rafael Payare - 马勒:第五交响曲(2024)

Orchestre symphonique de Montréal,Rafael Payare - 马勒:第五交响曲(2024)[Hi-Res 96kHz_24bit FLAC] 曲目:01.I. Trauermarsch. In gemessenem Schritt. Streng. Wie ein Kondukt.02.II. Stürmisch bewegt. Mit gröter Vehemenz03.III. Scherzo. Kräftig, nicht …

信息学奥赛复赛复习09-CSP-J2020-03表达式求值前置知识点-中缀表达式求值、摸运算、模运算性质、栈

PDF文档公众号回复关键字:20241002**1 P1981 [NOIP2013普及组] 表达式求值 ** [题目描述] 给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值 [输入格式] 一行,为需要你计算的表达式,表达式中只包含数字、加法运算符 “+” 和乘法运算符 “”,且没有括号,所有…

文件

一个文件会对应一个inode软硬链接有什么区别:是否具有独立的inode!! 软连接具有独立的inode--可以被当作独立文件看待。 硬连接没有独立的inode--就是链接前的inode编号。建立硬链接,根本就没有创建新文件,因为没有给硬链接分配独立的inode。既然没有创建文件,那么一定没…