http://lightoj.com/volume_showproblem.php?problem=1051

对于每个位置,设dfs(cur, one, two)表示前i个字母,拥有辅音字母one个,元音字母two个的情况。

目标是使得cur移动到结尾,这样就是能产生good串。然后超时

记忆化搜索。

比如前面的字符串是

JFLKAJS??FHJADJFA?

我不管前面的问号变了什么,也不管前面的东西是什么情况,假如,假如我的最后一个问号是变了元音,那么它下一个状态肯定

就是dfs(cur + 1, 0, two + 1),也就是辅音变成了0个。这样会使得很多状态重复了。所以记录一下就好。

JFLKAJS??FHJADJFA   ?   JFIJIJASLH??SDUAFHK??,也就是考虑现在空格分开的那个问号,假如我是把它变了元音,

它的连续的元音是2个,辅音是0个,这是固定了的状态了,如果搜索过的话,后面的已经不用枚举了。

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <assert.h>
#define IOS ios::sync_with_stdio(false)
using namespace std;
#define inf (0x3f3f3f3f)
typedef long long int LL; #include <iostream>
#include <sstream>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <string>
#include <bitset>
bool is[];
int dp[ + ][ + ][ + ];
int DFN, lenstr;
char str[];
bool good, bad;
void dfs(int cur, int one, int two) {
if (dp[cur][one][two] == DFN) return;
dp[cur][one][two] = DFN;
if (bad && good) return;
if (one == || two == ) {
bad = true;
return;
}
if (cur == lenstr + ) {
good = true;
return;
}
if (str[cur] == '?') {
dfs(cur + , one + , );
dfs(cur + , , two + );
} else {
if (is[str[cur]]) {
dfs(cur + , , two + );
} else dfs(cur + , one + , );
}
}
void work() {
scanf("%s", str + );
lenstr = strlen(str + );
++DFN;
good = false, bad = false;
dfs(, , );
static int f = ;
if (good && bad) {
printf("Case %d: MIXED\n", ++f);
} else if (bad) {
printf("Case %d: BAD\n", ++f);
} else {
printf("Case %d: GOOD\n", ++f);
}
}
int main() {
#ifdef local
freopen("data.txt", "r", stdin);
// freopen("data.txt", "w", stdout);
#endif
is['A'] = is['E'] = is['I'] = is['O'] = is['U'] = true;
int t;
scanf("%d", &t);
while (t--) work();
return ;
}

1051 - Good or Bad DFS 记忆化搜索的更多相关文章

  1. 不要62 hdu 2089 dfs记忆化搜索

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=2089 题意: 给你两个数作为一个闭区间的端点,求出该区间中不包含数字4和62的数的个数 思路: 数位dp中 ...

  2. dfs+记忆化搜索,求任意两点之间的最长路径

    C.Coolest Ski Route 题意:n个点,m条边组成的有向图,求任意两点之间的最长路径 dfs记忆化搜索 #include<iostream> #include<stri ...

  3. hdu 1078 FatMouse and Cheese (dfs+记忆化搜索)

    pid=1078">FatMouse and Cheese Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/ ...

  4. hdu 1078(dfs记忆化搜索)

    题意:容易理解... 思路:我开始是用dfs剪枝做的,968ms险过的,后来在网上学习了记忆化搜索=深搜形式+dp思想,时间复杂度大大降低,我个人理解,就是从某一个点出发,前面的点是由后面的点求出的, ...

  5. UVA 10400 Game Show Math (dfs + 记忆化搜索)

    Problem H Game Show Math Input: standard input Output: standard output Time Limit: 15 seconds A game ...

  6. 8636 跳格子(dfs+记忆化搜索)

    8636 跳格子 该题有题解 时间限制:2457MS  内存限制:1000K提交次数:139 通过次数:46 题型: 编程题   语言: G++;GCC Description 地上有一个n*m 的数 ...

  7. poj1088-滑雪 【dfs 记忆化搜索】

    http://poj.org/problem?id=1088 滑雪 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 79806 ...

  8. DFS——>记忆化搜索——>动态规划

    以洛谷P1802  5倍经验日 为例 https://www.luogu.org/problem/show?pid=1802 题目背景 现在乐斗有活动了!每打一个人可以获得5倍经验!absi2011却 ...

  9. POJ 1191 棋盘分割 【DFS记忆化搜索经典】

    题目传送门:http://poj.org/problem?id=1191 棋盘分割 Time Limit: 1000MS   Memory Limit: 10000K Total Submission ...

随机推荐

  1. HDU 6143 Killer Names DP+快速密

    Killer Names Problem Description > Galen Marek, codenamed Starkiller, was a male Human apprentice ...

  2. 状态模式-State

    状态模式:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类. 状态模式结构图: 代码实现:

  3. Apache Flink 1.5.1 Released

    Apache Flink: Apache Flink 1.5.1 Released http://flink.apache.org/news/2018/07/12/release-1.5.1.html ...

  4. VC实现趋势图绘制

    本文参考pudn上一个完整工程,在pudn搜索“50815867CurveDrawing”即可找到源代码.   上图是使用VS2010重写了该软件后的效果图,下面再贴出关键代码: // Plot.cp ...

  5. SPOJ:Harbinger vs Sciencepal(分配问题&不错的DP&bitset优化)

    Rainbow 6 is a very popular game in colleges. There are 2 teams, each having some members and the 2 ...

  6. BZOJ_2683_简单题&&BZOJ_1176_[Balkan2007]Mokia_CDQ分治+树状数组

    BZOJ_2683_简单题&&BZOJ_1176_[Balkan2007]Mokia_CDQ分治+树状数组 Description 维护一个W*W的矩阵,初始值均为S.每次操作可以增加 ...

  7. FTOUR2 - Free tour II

    传送门 题目翻译的很清楚……似乎点分治的题题目描述都非常简洁. 还是那个操作,一条路径要么全部在一棵子树中,要么经过当前的重心,所以考虑点分治. 首先dfs求出重心的每一棵子树中,有i个黑点的最长路径 ...

  8. bzoj3191卡牌游戏——概率DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3191 不用在意每个人的编号,只需看他们相对于庄家的位置即可: 所以设计状态f[i][j]为还 ...

  9. jQuery EasyUI Portal 保存拖动位置,仿谷歌DashBoard效果的

    仿照谷歌http://www.google.com/ig?hl=zh-CN中的效果,本文档中包含了拖动后保存位置至Cookie中以及拖动后不保存位置的html文件效果,文档结构

  10. 小程序不支持wx.request同步请求解决方法

    小程序为了用户体验,所有的request均为异步请求,不会阻塞程序运行 百牛信息技术bainiu.ltd整理发布于博客园 所以当你需要同步请求,锁死操作时,最好将所有的逻辑写在success:func ...