http://www.lydsy.com/JudgeOnline/problem.php?id=3297

这题拖了很久呢。。。

很久以前写了个dfs,,但是tle了。。。。。

然后一直想dp想不出来,写出来了又wa了。。

然后看到一英文题解,暂时就只会这样了。。

其实dp方程很简单。。。。。。

f[i]=min(f[i], f[j]+a[x]),f[i]是个字符串,所以用cpp自带的string处理字典序。。

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <cmath>
  4. #include <string>
  5. #include <iostream>
  6. #include <algorithm>
  7. #include <queue>
  8. using namespace std;
  9. #define rep(i, n) for(int i=0; i<(n); ++i)
  10. #define for1(i,a,n) for(int i=(a);i<=(n);++i)
  11. #define for2(i,a,n) for(int i=(a);i<(n);++i)
  12. #define for3(i,a,n) for(int i=(a);i>=(n);--i)
  13. #define for4(i,a,n) for(int i=(a);i>(n);--i)
  14. #define CC(i,a) memset(i,a,sizeof(i))
  15. #define read(a) a=getint()
  16. #define print(a) printf("%d", a)
  17. #define dbg(x) cout << #x << " = " << x << endl
  18. #define printarr2(a, b, c) for1(i, 1, b) { for1(j, 1, c) cout << a[i][j]; cout << endl; }
  19. #define printarr1(a, b) for1(i, 1, b) cout << a[i] << ' '; cout << endl
  20. inline const int getint() { int r=0, k=1; char c=getchar(); for(; c<'0'||c>'9'; c=getchar()) if(c=='-') k=-1; for(; c>='0'&&c<='9'; c=getchar()) r=r*10+c-'0'; return k*r; }
  21. inline const int max(const int &a, const int &b) { return a>b?a:b; }
  22. inline const int min(const int &a, const int &b) { return a<b?a:b; }
  23.  
  24. const int N=1005;
  25. int n, L, can[N][N], len[N];
  26. string s[N], d[N];
  27. char a[N], tp[N];
  28. bool check(int x, int l) {
  29. int sz=len[x];
  30. if(l+sz>L) return 0;
  31. rep(i, sz) if(a[l+i]!='?' && a[l+i]!=s[x][i]) return 0;
  32. return 1;
  33. }
  34. int main() {
  35. read(L); read(n);
  36. scanf("%s", a);
  37. for1(i, 1, n) scanf("%s", tp), s[i]=tp, len[i]=strlen(tp);
  38. for1(i, 1, n) rep(j, L) can[i][j]=check(i, j);
  39. for3(k, L-1, 0)
  40. for1(i, 1, n) {
  41. int j=k+len[i];
  42. if(can[i][k] && (j==L || d[j]!="") && (d[k]=="" || d[k]>s[i]+d[j]))
  43. d[k]=s[i]+d[j];
  44. }
  45. printf("%s", d[0].c_str());
  46. return 0;
  47. }

Description

   发生了这么多,贝茜已经忘记了她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”。
给你字典,贝西记得的字母,请找到她的密码。如果有一个以上的密码是可能的,找到字典序最前的。

Input

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

Output

*第1行:密码

Sample Input

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

Sample Output

applebananapies

HINT

Source

【BZOJ】3297: [USACO2011 Open]forgot(dp)的更多相关文章

  1. 【BZOJ】1055: [HAOI2008]玩具取名(dp)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1055 我竟然都没往dp这个方向想.....百度了下看到标题是dp马上就会转移了QAQ... 设d[i ...

  2. 【BZOJ】1084: [SCOI2005]最大子矩阵(DP)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1084 有一个1A--- 本题没看懂,,不会啊囧..感觉完全设不了状态..看了题解,囧,m<=2 ...

  3. 【BZOJ】1046: [HAOI2007]上升序列(dp)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1046 一直看错题....................... 这是要求位置的字典序啊QQQAAAQ ...

  4. 【BZOJ】3315: [Usaco2013 Nov]Pogo-Cow(dp)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3315 果然自己太弱. 想不出dp方程啊.. 其实,以后记住...与上一个状态或下一个状态有关,,可以 ...

  5. 【BZOJ】1090: [SCOI2003]字符串折叠(dp)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1090 随便yy一下.. 设f[i,j]表示i-j的最小长度 f[i, j]=min{j-i+1, f ...

  6. 【BZOJ】1096: [ZJOI2007]仓库建设(dp+斜率优化)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1096 首先得到dp方程(我竟然自己都每推出了QAQ)$$d[i]=min\{d[j]+cost(j+ ...

  7. 【BZOJ】2016: [Usaco2010]Chocolate Eating(二分)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2016 这些最大最小显然是二分. 但是二分细节挺多的...这里注意二分的区间,可以累计所有的可能,然后 ...

  8. P1439 【模板】最长公共子序列(DP)

    题目描述 给出1-n的两个排列P1和P2,求它们的最长公共子序列. 输入输出格式 输入格式: 第一行是一个数n, 接下来两行,每行为n个数,为自然数1-n的一个排列. 输出格式: 一个数,即最长公共子 ...

  9. 【LeetCode】10.Regular Expression Matching(dp)

    [题意] 给两个字符串s和p,判断s是否能用p进行匹配. [题解] dp[i][j]表示s的前i个是否能被p的前j个匹配. 首先可以分成3大类情况,我们先从简单的看起: (1)s[i - 1] = p ...

随机推荐

  1. ffmpeg相关资源

    FFPLAY的原理(一) http://blog.csdn.net/shenbin1430/article/details/4291893 ubuntu12.04下命令安装ffplay等: sudo ...

  2. 常见的web前端性能优化

    一. 语义化HTML:语义化HTML的好处是可以使代码简洁清晰.支持不同设备.利于搜索引擎.便于团队开发: 减少DOM节点:加速页面渲染: 给图片加上正确的宽高值:这可以减少页面重绘,同时防止图片缩放 ...

  3. RAC环境下的堵塞(blocking blocked)

    RAC环境下的堵塞不同于单实例情形,由于我们须要考虑到位于不同实例的session.也就是说之前查询的v$session,v$lock对应的应变化为全局范围来查找.本文提供了2个查询脚本,并给出实例演 ...

  4. canvas贝济埃曲线

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  5. 利用POI进行Excel的导出

    需求:将用户的违约金信息导出为excel表格格式 步骤 1. 数据库中增加按钮的值(注意上级编号要和页面隐藏域中的相等) DZ内容(页面加载时根据SJBH查询数据库内容,读取DZ字段信息并加载样式及方 ...

  6. java基础讲解06-----字符串

    1. package test; public class chb01 { public static void main(String[] ggs)        {            /**  ...

  7. 让python cookie支持特殊字符

    让python cookie支持特殊字符 先对cookie做下简单的介绍 cookie的作用: tcp协议能够通过三次握手建立连接.client发送的多次请求能够通过句柄维护同一个连接.可是http协 ...

  8. PowerShell---Operators 介绍

    1.Arithmetic operators(算术运算符) 算术运算符包括加.减.乘.除.取模 此外,加法运算符 (+) 和乘法运算符 (*) 还可对字符串.数组和哈希表进行运算.加法运算符将输入连接 ...

  9. Markdown进阶指南

    数学公式编辑 Mac OS下建议使用Daum Equation Editor,按照MathType那样写公式,自动生成TeX代码 行内公式:用$...$包住Tex代码 行间公式:用$$..$$包住Te ...

  10. ubuntu命令改变文档权限和所有者

    chgrp :改变档案所属群组 chown :改变档案拥有者 chmod :改变档案的权限, SUID, SGID, SBIT等等的特性,可读.可写.可执行 1 chgrp 例子 chgrp [-R] ...