常州模拟赛d1t5 遗忘口令
就像每个人都会遇到的问题一样,贝西忘了在 cowtube 上的口令。不过,她还记着一些关于口令
的信息。首先,她确定口令由小写字母组成,长度为 L。其次,这个密码是由几个单词组合而成
的。贝西一共认识 N 个单词,每个单词长度都在 1 到 20 之间,由小写字母组成。最后,贝西还
记得口令上一些位置的字母,她会尽量提供记住的部分,如果有些位置上的字母不记得了,就用?
代替。
给定贝西记得的口令片段和她认识的单词列表,请恢复出她的口令,如果完全符合条件的口令不
止一个,输出按照字典序排在最前面的那个。
输入输出格式
输入格式:
第一行:两个用空格分开的整数:L 和 N,1≤L≤1000,1≤N≤1000
第二行:一个 L 长的字符串,代表口令 P
第三行到 N+2 行:第 i+2 有一个字符串 W_i,表示贝西认识的第 i 个单词 W_i
输出格式:
第一行:一个字符串,表示符合条件的,在字典序下最靠前的口令
输入输出样例
15 6
a??l?ban???????
apple
cow
farmer
banana
bananas
pies
applebananapies
样例解释
(有两个可行的组合,一个是 applebananapies,还有一个是 applebananascow,前者较靠前)
说明
对于 30% 的数据,有 1 ≤ L,N≤ 30。
对于 100% 的数据,有 1 ≤ L,N≤ 1, 000。
分析:万万没想到这道题还能用dp做,大开眼界啊,但是时间紧直接打了个暴力还有20分?
其实这道题很像0-1背包啊,每个口令的容积就是它的长度,价值就是它的字典序的贡献,只不过多了几个限制,最关键的是字符串中间一定不能有空串,也就是说不能拼接成apple banana这样的,所以要加一个特判,dp就很好想啦,设f[i]为前i个字符的组合,那么f[i] = min{f[i-j.size()] + j}.
这种字符串的下标处理真的是超级超级烦人.
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<cmath>
#include<map>
#include<string> using namespace std; int l, n;
string p,w[],f[]; bool check(int x, int y)
{
for (int i = x - w[y].size() + , j = ; i <= x; i++, j++)
if (p[i] != '?' && p[i] != w[y][j])
return false;
return true;
} int main()
{
scanf("%d%d", &l, &n);
cin >> p;
for (int i = ; i <= n; i++)
cin >> w[i];
for (int i = ; i <= l; i++)
for (int j = ; j <= n; j++)
{
int sizee = w[j].size();
if (sizee > i || (f[i - sizee] == "" && i - sizee != ))
continue;
if (check(i - , j))
{
if (f[i] == "")
f[i] = f[i - sizee] + w[j];
else
f[i] = min(f[i], f[i - sizee] + w[j]);
}
}
cout << f[l] << endl; return ;
}
常州模拟赛d1t5 遗忘口令的更多相关文章
- 常州模拟赛d4t1 立方体
题目描述 立方体有 6 个面,每个面上有一只奶牛,每只奶牛都有一些干草.为了训练奶牛的合作精神,它 们在玩一个游戏,每轮:所有奶牛将自己的干草分成 4 等份,分给相邻的 4 个面上的奶牛. 游戏开始, ...
- 常州模拟赛d7t3 水管
分析:第一问还是很好做的,关键是怎么做第二问.我们可以每次删掉最小生成树上的一条边,然后再求一次最小生成树,看边权和大小和原来的是不是一样的,不过这个做法效率很低. 考虑Kruskal算法的原理,每次 ...
- 常州模拟赛d6t3 噪音
FJ有M个牛棚,编号1至M,刚开始所有牛棚都是空的.FJ有N头牛,编号1至N,这N头牛按照编号从小到大依次排队走进牛棚,每一天只有一头奶牛走进牛棚.第i头奶牛选择走进第p[i]个牛棚.由于奶牛是群体动 ...
- bzoj3743 [Coci2015]Kamp 常州模拟赛d6t2
3743: [Coci2015]Kamp Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 484 Solved: 229[Submit][Status ...
- 常州模拟赛d5t2 mogician
分析:一个暴力的思想是枚举g,然后枚举每个数ai,看能不能符合要求,这样复杂度是O(nA)的,直接T掉了.也没什么其他的办法了,在暴力的基础上优化一下,优化的关键是要如何快速统计出不满足要求的数的个数 ...
- 常州模拟赛d5t1 journalist
分析:出题人丧心病狂卡spfa......只能用dijkstar+堆优化. 主要的难点是字典序的处理上,一个想法是在做最短路的时候处理,边松弛边记录,比个大小记录最佳答案.具体的思路大概和最短路计数差 ...
- 常州模拟赛d4t3 字符串划分
题目描述 给你一串由小写字母组成的字符串,希望你把它划分成一些小段,使得每一小段字符串中的字母 都不相同,并且希望分的段数尽量少. 然后,把这些小段按字典序排序后输出,中间由一个空格分隔. 例如:字符 ...
- 常州模拟赛d4t2 陶陶摘苹果
题目描述 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出 n 个苹果.苹果成熟的时候,陶陶就会 跑去摘苹果. 陶陶的手不能弯 (他仅能把手伸直),当且仅当陶陶达到的高度与苹果的高度相等的时候,陶陶 ...
- 常州模拟赛d3t3 两只怪物心心相印
题目背景 从前我是一位无名的旅人,旅途中我得到了某样东西:贤者之石.我因此得到悠久的时光和漂泊的生命.1897年冬天,我一时兴起舍弃了旅人的生活. 贤者之石创造出来的,是货真价实的黄金.我的名声传遍了 ...
随机推荐
- JS 操作内容 操作元素
操作内容:普通元素.innerHTML = "值": 会把标记执行渲染普通元素.innerText = "值": 将值原封不动的展示出来,即使里面有标记 var ...
- 包含日志文件getshell
包含日志文件getshell 一.包含日志文件漏洞利用概述 当我们没有上传点,并且也没有url_allow_include功能时,我们就可以考虑包含服务器的日志文件. ...
- 洛谷 P1009 阶乘之和
题目描述 用高精度计算出S=1!+2!+3!+…+n!(n≤50) 其中“!”表示阶乘,例如:5!=5*4*3*2*1. 输入输出格式 输入格式: 一个正整数N. 输出格式: 一个正整数S,表示计算结 ...
- 成魔笔记1——先入IT,再成魔
关于我为什么要写这个博客的原因,做一个简单的解释.因为报考的一时兴起,我选择了软件专业.可是三年下来,感觉自己没做多少事,也没收获到多少东西.很多时候都是老师讲什么,都是完全陌生的东西,跟不上教学的思 ...
- strong 、weak、copy 、assign 、retain 、unsafe_unretained 与autoreleasing区别和作用
strong关键字与retain关似,用了它,引用计数自动+1,用实例更能说明一切 @property (nonatomic, strong) NSString *stringA; @property ...
- HDU-6035 Colorful Tree(树形DP) 2017多校第一场
题意:给出一棵树,树上的每个节点都有一个颜色,定义一种值为两点之间路径中不同颜色的个数,然后一棵树有n*(n-1)/2条 路径,求所有的路径的值加起来是多少. 思路:比赛的时候感觉是树形DP,但是脑袋 ...
- ajax的traditional属性
jquery框架的ajax参数除了常用的 $.ajax({ url: 'xxx', type: 'xxx', data: 'xxx', success: 'xxx' ... }) 外还有一个参数需要特 ...
- SNP|RELP|genetic polymorphism|
5.3个体基因组呈现广泛变化 遗传多态性:一个基因座上存在多个等位基因(因为野生型不止一种基因)的现象,但是只有这多种等位基因满足:1.多个基因稳定存在2.基因在种群中数目大于1%时,认为该基因座多态 ...
- Java中的线程--多线程面试题
到这里,基本上线程的并发中的知识点都是学到了,到了最后,还有三道面试题,从面试题中学习更加的加深一下,多线程中的知识点,如何在实际的问题中来解决多线程的问题,可以更好的从实际出发 一.面试题1 面试题 ...
- Bootstrap select(选择列表)
当您想让用户从多个选项中进行选择,但是默认情况下只能选择一个选项,则使用选择框 1.使用<select>展示列表选项 2.使用multiple="multiple"允许 ...