题目描述

发生了这么多,贝茜已经忘记了她cowtube密码。然而,她记得一些有用的信息。 
首先,她记得她的密码(记为变量P)长度为L(1 <= L<=1,000)字符串,并可以被分成 一个或多个词(不一定是唯一的),词来自于字典中NW(1<=NW<=1,000)个独特的词。 一个词W_i,被定义为一个长度1..20的小写字母序列('a'..'z')。 
她还记得她密码中某些字母的位置。 请看下面的例子。贝西知道她的密码看起来像"a??l?ban???????"('?'代表一个字母,她不记得), 
她的字典里有下面的词: 
apple 
cow 
farmer 
banana 
bananas 
pies 
贝西有两个可能的密码是的“applebananapies”和“applebananascow”。 
给你字典,贝西记得的字母,请找到她的密码。如果有一个以上的密码是可能的,找到字典序最前的。

输入

*第1行:两个空格分隔的整数:L和NW 
*第2行:一个字符串,长度为L:P 
*第3..N+2W行:第I+2行包含在字典中的第i个字:W_i

输出

*第1行:密码

样例输入

15 6
a??l?ban???????
apple
cow
farmer
banana
bananas
pies

样例输出

applebananapies


题解

坑爹的类背包dp

设f[i]为前i长度时字典序最小的字符串。

状态转移方程显然是f[i]=min{f[i-len[j]]+a[j]}。

然后就是各种判定。

最坑爹的就是c++的string,头一次用,一脸懵逼,调了半天。

然后代码也很丑,凑合着看吧。

#include <cstdio>
#include <cstring>
#include <string>
using namespace std;
char str[1010] , w[1010][30] , ans[1010];
int len[1010];
string f[1010] , a[1010];
bool judge(int i , int j)
{int k;for(k = 1 ; k <= len[j] ; k ++ )if(str[i - len[j] + k] != '?' && str[i - len[j] + k] != w[j][k])return 0;return 1;
}
int main()
{int n , m , i , j;scanf("%d%d%s" , &n , &m , str + 1);for(i = 1 ; i <= m ; i ++ )scanf("%s" , w[i] + 1) , len[i] = strlen(w[i] + 1) , a[i] = w[i] + 1;for(i = 1 ; i <= n ; i ++ )for(j = 1 ; j <= m ; j ++ )if(len[j] <= i && (i - len[j] == 0 || f[i - len[j]] != "") && judge(i , j) && (f[i] == "" || f[i] > f[i - len[j]] + a[j]))f[i] = f[i - len[j]] + a[j];printf("%s\n" , f[n].c_str());return 0;
}

转载于:https://www.cnblogs.com/GXZlegend/p/6404740.html

【bzoj3297】[USACO2011 Open]forgot STL+dp相关推荐

  1. 【NOIP2014】飞扬的小鸟 背包dp

    UOJ[NOIP2014]飞扬的小鸟 背包dp codevs 3729 飞扬的小鸟 苟且抄DQS代码. 题解都在代码注释中-- #include <cstdio> #include < ...

  2. 【BZOJ3769】spoj 8549 BST again DP(记忆化搜索?)

    [BZOJ3769]spoj 8549 BST again Description 求有多少棵大小为n的深度为h的二叉树.(树根深度为0:左右子树有别:答案对1000000007取模) Input 第 ...

  3. 【BZOJ1899】[Zjoi2004]Lunch 午餐 贪心+DP

    [BZOJ1899][Zjoi2004]Lunch 午餐 Description 上午的训练结束了,THU ACM小组集体去吃午餐,他们一行N人来到了著名的十食堂.这里有两个打饭的窗口,每个窗口同一时 ...

  4. 【BZOJ2073】[POI2004]PRZ 状压DP

    [BZOJ2073][POI2004]PRZ Description 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍 ...

  5. 【BZOJ3640】JC的小苹果 概率DP+高斯消元

    [BZOJ3640]JC的小苹果 Description 让我们继续JC和DZY的故事. "你是我的小丫小苹果,怎么爱你都不嫌多!" "点亮我生命的火,火火火火火!&qu ...

  6. 【BZOJ1058】[ZJOI2007]报表统计 STL

    [BZOJ1058][ZJOI2007]报表统计 Description 小Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工作,作为她的生日礼物之一.经 ...

  7. 【BZOJ2500】幸福的道路 树形DP+RMQ+双指针法

    [BZOJ2500]幸福的道路 Description 小T与小L终于决定走在一起,他们不想浪费在一起的每一分每一秒,所以他们决定每天早上一同晨练来享受在一起的时光. 他们画出了晨练路线的草图,眼尖的 ...

  8. 【BZOJ4379】[POI2015]Modernizacja autostrady 树形DP

    [BZOJ4379][POI2015]Modernizacja autostrady Description 给定一棵无根树,边权都是1,请去掉一条边并加上一条新边,定义直径为最远的两个点的距离,请输 ...

  9. 【bzoj1026】[SCOI2009]windy数 数位dp

    题目描述 windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间,包括A和B,总共有多少个windy数? 输入 包含两个整数 ...

  10. 【BZOJ-1952】城市规划 [坑题] 仙人掌DP + 最大点权独立集(改)

    1952: [Sdoi2010]城市规划 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 73  Solved: 23 [Submit][Status ...

最新文章

  1. 初步认识Volatile-什么叫缓存一致性呢?
  2. linux命令详解——top
  3. 接口入参形式_花椒测试平台 接口篇
  4. 提示tun虚拟网卡没有安装_Win10家庭版通过Hyper-V安装Centos7+Python3.7过程总结
  5. 控件安全注册方法3选
  6. 复习django项目三——视图显示模板templates
  7. TIOBE 2 月编程语言排行榜:VB 又有人要了,Go 一直在跌!
  8. 阅读《黑客与画家》有感——Hackers and Painters
  9. 面试题之序列化与反序列化
  10. android studio 融云,融云 SDK 集成详解 – Android Studio
  11. [已实现]暴力破解路由器管理密码
  12. 智齿徐懿 | 一个“外行”眼中的呼叫中心系统未来
  13. Excel表格每页都打印表头
  14. Isito - Rate Limits(请求限速)
  15. 电子书管理软件Calibre使用
  16. IDEA连接mysql又报错!Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezone' prope
  17. LeetCode数据库题目1-123
  18. 莫拉克电梯服务器说明书_默纳克操作手册
  19. [前端笔记——HTML 表格] 8.HTML 表格
  20. 搜索引擎优化,SEO关键词快速排名方法有哪些?

热门文章

  1. 办公软件在多屏宽屏上的应用设想
  2. 安装APK时INSTALL_FAILED_ALREADY_EXISTS的解决办法
  3. Day_05 显示字符串
  4. 免费文件分发服务器,文件分发服务器 AWS CloudFront(CDN)使用入门-以S3为例 Lebal:Research...
  5. C# dataGridView控件 左上角加string
  6. 递归求n的阶乘不溢出_面试官:说一说递归如何优化尾递归优化
  7. python linux调试_linux怎么调试python
  8. windows上dmg转换cdr_cdr中常见问题及其解决方案
  9. ipad如何连接电脑_台式电脑如何连接蓝牙耳机
  10. linux数据结构视频,数据结构视频教程