C. An impassioned circulation of affection DP
http://codeforces.com/contest/814/problem/C
12
ooyomioomioo
2
1 o
2 o
这题我是用dp解的,不过好像很慢,比赛的时候算了下不会mle,就没滚动数组了。
dp[i][k][ch]表示以第i位结尾,允许变化k次,所求的字符是ch时的最大连续数量。
如果k > 0,那么dp[i][k][ch] > 0的,因为肯定可以把第i位变了。
那么对于第i位来说,如果str[i]和ch相同,那么应该是dp[i][k][ch] = dp[i - 1][k][ch] + 1,就是和上一段可以结合。而且不用花费变化次数,如果不同,那么需要把str[i]变成ch,才能和前面那一段结合,就是dp[i][k][ch] = dp[i - 1][k - 1][ch] + 1
复杂度n^2 * 26
#include <bits/stdc++.h>
#define IOS ios::sync_with_stdio(false)
using namespace std;
#define inf (0x3f3f3f3f)
typedef long long int LL;
char str[];
int lenstr;
//void dfs(char ch, int cur, int nowLen, int did, bool can) {
// if (did > lenstr) return;
// dp[ch][did] = max(dp[ch][did], nowLen);
// if (dp[ch][did] > nowLen && nowLen && can) return;
// if (cur > lenstr) return;
// if (str[cur] == ch) {
// dfs(ch, cur + 1, nowLen + 1, did, false);
// } else {
// dfs(ch, cur + 1, 0, did, false);
// dfs(ch, cur + 1, nowLen + 1, did + 1, true);
//
// }
//}
int dp[ + ][ + ][ + ];
int ans[ + ][ + ];
void work() {
int n;
scanf("%d", &n);
scanf("%s", str + );
lenstr = strlen(str + );
for (int ch = ; ch < ; ++ch) {
char cmp = ch + 'a';
for (int i = ; i <= lenstr; ++i) {
for (int k = ; k <= lenstr; ++k) {
if (cmp == str[i]) {
dp[i][k][ch] = dp[i - ][k][ch] + ;
} else if (k) dp[i][k][ch] = dp[i - ][k - ][ch] + ;
}
}
for (int k = ; k <= lenstr; ++k) {
int mx = ;
for (int i = ; i <= lenstr; ++i) {
mx = max(mx, dp[i][k][ch]);
}
ans[k][ch] = mx;
}
}
// cout << dp[2][0]['o' - 'a'] << endl;
// cout << dp[3][1]['o' - 'a'] << endl;
// cout << dp[4][1]['o' - 'a'] << endl;
int q;
scanf("%d", &q);
while (q--) {
char s[];
int m;
scanf("%d%s", &m, s);
printf("%d\n", ans[m][s[] - 'a']);
} } int main() {
#ifdef local
freopen("data.txt", "r", stdin);
// freopen("data.txt", "w", stdout);
#endif
work();
return ;
}
C. An impassioned circulation of affection DP的更多相关文章
- 【Codeforces Round 418】An impassioned circulation of affection DP
C. An impassioned circulation of affection ...
- codeforces 814 C. An impassioned circulation of affection 【尺取法 or DP】
//yy:因为这题多组数据,DP预处理存储状态比每次尺取快多了,但是我更喜欢这个尺取的思想. 题目链接:codeforces 814 C. An impassioned circulation of ...
- An impassioned circulation of affection
An impassioned circulation of affection time limit per test 2 seconds memory limit per test 256 mega ...
- Codeforces Round #418 (Div. 2) C. An impassioned circulation of affection
C. An impassioned circulation of affection time limit per test 2 seconds memory limit per test 256 m ...
- 【尺取或dp】codeforces C. An impassioned circulation of affection
http://codeforces.com/contest/814/problem/C [题意] 给定一个长度为n的字符串s,一共有q个查询,每个查询给出一个数字m和一个字符ch,你的操作是可以改变字 ...
- codeforces 814 C. An impassioned circulation of affection(二分+思维)
题目链接:http://codeforces.com/contest/814/problem/C 题意:给出一串字符串然后q个询问,问替换掉将m个字符替换为字符c,能得到的最长的连续的字符c是多长 题 ...
- An impassioned circulation of affection(尺取+预处理)
题目链接:http://codeforces.com/contest/814/problem/C 题目: 题意:给你一个长度为n的字符串,m次查询,每次查询:最多进行k步修改,求字符c(要输入的字符) ...
- CF814C An impassioned circulation of affection
思路: 对于题目中的一个查询(m, c),枚举子区间[l, r](0 <= l <= r < n),若该区间满足其中的非c字符个数x不超过m,则可以将其合法转换为一个长度为r-l+1 ...
- Codeforces 814C - An impassioned circulation of affection
原题链接:http://codeforces.com/contest/814/problem/C 题意:有长度为n的一个字符串,q个询问,每个询问由数字m和字符c组成,问最多在字符串中替换m个字符,使 ...
随机推荐
- linux命令学习笔记(34):du 命令
Linux du命令也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看, 还是和df命令有一些区别的. .命令格式: du [选项][文件] .命令功能: ...
- linux 网络编程getdomainname与gethostname函数
getdomainname与gethostname函数 1 gethostname() : 返回本地主机的标准主机名. 原型如下: #include <unistd.h> int geth ...
- dd备份文件系统
1.实现dd的备份: 使用gzip压缩: dd if=/dev/hdb | gzip > /local/path/image.gz 说明:/dev/hdb 是硬盘整盘.对不同的硬盘,可能是 /d ...
- MySQL上周新增激活用户在上周下单情况_20161107周一
上周新增激活用户在上周下单情况 1.上周激活用户明细 #上周激活用户明细 SELECT a.城市,a.用户ID,a.用户名称,b.用户地址,b.联系电话,a.订单日期,c.年周,c.上周一,a.订单I ...
- Elasticsearch官方安装
Installationedit Elasticsearch requires at least Java 8. Specifically as of this writing, it is reco ...
- Vijos1132:求二叉树的先序序列
描述 给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度≤8). 格式 输入格式 第一行为二叉树的中序序列第二行为二叉树的后序序列 输出格式 一行,为二叉树的先序 ...
- 隐藏时间表ribbon按钮
Ribbon.ContextualTabs.Timesheet.Home.Share;Ribbon.ContextualTabs.Timesheet.Home.ShowHide;Ribbon.Cont ...
- 关于java中equals与==的区别的小实验
java中equals与==经常容易混淆,简单一点说就是equals比较的是值是否相等,是一种方法,==比较的两个对象在JVM中的地址,是一种操作符. 做了几个小实验比较结果. 实验一: String ...
- oracle处理重复数据
oracle查找重复记录 SELECT *FROM t_info aWHERE ((SELECT COUNT(*) FROM t_info WHERE Title ...
- Regex Golf 练习记录
正则表达式的练习网站:https://alf.nu/RegexGolf 共17道题:只能说从第10题开始就很变态了,就是看看答案好了 .Warmup: foo .Anchors: k$ 或 ick$ ...