CodeForces 154A Hometask dp
题目链接:
http://codeforces.com/problemset/problem/154/A
题意:
给你一个字符串,和若干模板串(长度为2),至少删除多少个字母,使得字符串的字串里面没有模板串。
题解:
dp[i][j]表示合法子串s[0...i]的最后一位为j时的最小花费(花费指删除的字母个数)
对每一位考虑删和不删的情况:
如果删,那么它的最后一位一定为之前出现过的。
如果不删,那么s[i]就是最后一位。
考虑这两种情况的转移就可以了。
时间复杂度:O(n*26*26)
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; const int maxn = 1e5 + ;
const int INF = 0x3f3f3f3f; int dp[maxn][];
int cnt[];
bool mp[][]; char str[maxn];
int len, n; void init() {
memset(dp, 0x3f, sizeof(dp));
memset(mp, , sizeof(mp));
memset(cnt, -, sizeof(cnt));
} inline int f(char c) {
return c - 'a' + ;
} int main() {
while (scanf("%s%d", str, &n) == ) {
init();
len = strlen(str);
char s[];
for (int i = ; i<n; i++) {
scanf("%s", s);
mp[f(s[])][f(s[])] = mp[f(s[])][f(s[])] = ;
}
cnt[f(str[])] = ;
dp[][f(str[])] = ;
for (int i = ; i<len; i++) dp[i][] = i + ;
for (int i = ; i<len; i++) {
int ch = f(str[i]);
cnt[ch] = i;
//第i位删
for (int j = ; j <= ; j++) {
if (cnt[j] != -) {
int k = cnt[j];
dp[i][j] = min(dp[i][j], dp[k][j] + i - k);
}
}
dp[i][ch] = min(dp[i][ch], dp[i - ][]);
//第i位不删
for (int k = ; k <= ; k++) {
if (mp[k][ch] == ) {
dp[i][ch] = min(dp[i][ch], dp[i - ][k]);
}
}
}
int ans = INF;
for (int i = ; i <= ; i++) {
ans = min(ans, dp[len - ][i]);
}
printf("%d\n", ans);
}
return ;
}
CodeForces 154A Hometask dp的更多相关文章
- Codeforces Round #131 (Div. 2) B. Hometask dp
题目链接: http://codeforces.com/problemset/problem/214/B Hometask time limit per test:2 secondsmemory li ...
- codeforces 682D(DP)
题目链接:http://codeforces.com/contest/682/problem/D 思路:dp[i][j][l][0]表示a串前i和b串前j利用a[i] == b[j]所得到的最长子序列 ...
- codeforces 666A (DP)
题目链接:http://codeforces.com/problemset/problem/666/A 思路:dp[i][0]表示第a[i-1]~a[i]组成的字符串是否可行,dp[i][1]表示第a ...
- Codeforces 176B (线性DP+字符串)
题目链接: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=28214 题目大意:源串有如下变形:每次将串切为两半,位置颠倒形成 ...
- Codeforces 55D (数位DP+离散化+数论)
题目链接: http://poj.org/problem?id=2117 题目大意:统计一个范围内数的个数,要求该数能被各位上的数整除.范围2^64. 解题思路: 一开始SB地开了10维数组记录情况. ...
- Codeforces 264B 数论+DP
题目链接:http://codeforces.com/problemset/problem/264/B 代码: #include<cstdio> #include<iostream& ...
- CodeForces 398B 概率DP 记忆化搜索
题目:http://codeforces.com/contest/398/problem/B 有点似曾相识的感觉,记忆中上次那个跟这个相似的 我是用了 暴力搜索过掉的,今天这个肯定不行了,dp方程想了 ...
- CodeForces 512B(区间dp)
D - Fox And Jumping Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64 ...
- CodeForces - 1051D Bicolorings(DP)
题目链接:http://codeforces.com/problemset/problem/1051/D 看了大佬的题解后觉着是简单的dp,咋自己做就做不来呢. 大佬的题解:https://www.c ...
随机推荐
- OpenWrt-Git依赖报错
前言 在Ubuntu中搭建openwrt编译环境时,安装完了需要的软件之后,我们执行命令检查依赖是否满足, make defconfig 有时会出现以下警告: ihid@ubuntu:~/chaos_ ...
- python最新笔试题
这是笔者面试小十家公司后呕心沥血总结的一些笔试编程题~具体公司就不透露了.哎,说多了都是泪啊. 1.二分法查找: l = [1, 2, 3, 4, 5, 6, 7, 8, 9] find_num = ...
- 30. Insert Interval【LintCode by java】
Description Given a non-overlapping interval list which is sorted by start point. Insert a new inter ...
- ASP.NET <% %>的各种形式用法
1.<% %>用来绑定后台代码 < % ;i<;i++) { Reaponse.Write(i.ToString()); } %> 2.<%# %> 是在绑定 ...
- 20155209 实验三 敏捷开发与XP实践
20155209 实验三 敏捷开发与XP实践 实验内容 1. XP基础 2. XP核心实践 3. 相关工具 提交点一: 在IDEA中使用工具(Code->Reformate Code)把下面代码 ...
- MYSQL--慢查询,卡死等处理
命令: show processlist; 如果是root帐号,你能看到所有用户的当前连接.如果是其它普通帐号,只能看到自己占用的连接. show processlist;只列出前100条,如果想全列 ...
- charles录制https请求
之前一直用windows系统,抓包什么的都是用的fiddler或者wireshark,操作比较简单,扩展性也比较强,现在因为工作原因换了mac,在网上一直没有找到fiddler的mac版本,就只能切换 ...
- 一起来做Chrome Extension《一些问题》
目录 Unchecked runtime.lastError: The message port closed before a response wa received. 使用 eval Conte ...
- C# List<string> 的Contains方法 是区分大小写的
List<string> 的Contains 是区分大小写的 代码: List<string> test = new List<string>(); test.A ...
- Windows网络通信(二):socket异步编程
简述 这里使用的API和同步编程的API是差不多的,只多了一个ioctlsocket和select函数.这里面涉及一个很重要的结构体fd_set.这里用到的API大部分都是windows和linux通 ...