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的更多相关文章

  1. 【Codeforces Round 418】An impassioned circulation of affection DP

                                                            C. An impassioned circulation of affection   ...

  2. codeforces 814 C. An impassioned circulation of affection 【尺取法 or DP】

    //yy:因为这题多组数据,DP预处理存储状态比每次尺取快多了,但是我更喜欢这个尺取的思想. 题目链接:codeforces 814 C. An impassioned circulation of ...

  3. An impassioned circulation of affection

    An impassioned circulation of affection time limit per test 2 seconds memory limit per test 256 mega ...

  4. 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 ...

  5. 【尺取或dp】codeforces C. An impassioned circulation of affection

    http://codeforces.com/contest/814/problem/C [题意] 给定一个长度为n的字符串s,一共有q个查询,每个查询给出一个数字m和一个字符ch,你的操作是可以改变字 ...

  6. codeforces 814 C. An impassioned circulation of affection(二分+思维)

    题目链接:http://codeforces.com/contest/814/problem/C 题意:给出一串字符串然后q个询问,问替换掉将m个字符替换为字符c,能得到的最长的连续的字符c是多长 题 ...

  7. An impassioned circulation of affection(尺取+预处理)

    题目链接:http://codeforces.com/contest/814/problem/C 题目: 题意:给你一个长度为n的字符串,m次查询,每次查询:最多进行k步修改,求字符c(要输入的字符) ...

  8. CF814C An impassioned circulation of affection

    思路: 对于题目中的一个查询(m, c),枚举子区间[l, r](0 <= l <= r < n),若该区间满足其中的非c字符个数x不超过m,则可以将其合法转换为一个长度为r-l+1 ...

  9. Codeforces 814C - An impassioned circulation of affection

    原题链接:http://codeforces.com/contest/814/problem/C 题意:有长度为n的一个字符串,q个询问,每个询问由数字m和字符c组成,问最多在字符串中替换m个字符,使 ...

随机推荐

  1. dynamic 作为参数传入另一个程序集,获取值

    dynamicOBJ.GetType().GetProperty("key").GetValue(dynamicOBJ, null)

  2. Spring MVC 中/和/*的区别

    <?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" ...

  3. python之django入门

    一.搭建开发环境 使用virualenv创建虚拟python环境 pip install virtualenv [root@master djiango]# find / -name virtuale ...

  4. 「LuoguP1144」 最短路计数(dijkstra

    题目描述 给出一个NN个顶点MM条边的无向无权图,顶点编号为1-N1−N.问从顶点11开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: 第一行包含22个正整数N,MN,M,为图的顶点数与边 ...

  5. WPF TreeView 后台C#选中指定的Item, 需要遍历

               private TreeViewItem FindTreeViewItem(ItemsControl container, object item)         {      ...

  6. [allmake] -- 交叉编译原来如此简单

    原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处.作者信息和本声明.否则将追究法律责任.:http://www.cnblogs.com/johnd/p/5060530.html 作者:Jo ...

  7. 如何用python最快的获取大文件的最后几行

    工作中经常会遇到处理日志文件的问题:为了得到日志的最新状态,我们需要获取日志文件的最后部分行来做判断.那么,这种情况下我们应该怎么做呢? 1)常规方法:从前往后依次读取 步骤:open打开日志文件. ...

  8. AngularJs(Part 2)

    I am still tired to translate these into Chinese. but who cares? i write these posts just for myself ...

  9. JDK5特性

    静态导入(了解) JDK 1.5 增加的静态导入语法用于导入类的某个静态属性或方法.使用静态导入可以简化程序对类静态属性和方法的调用. 语法: import static 包名.类名.静态属性|静态方 ...

  10. 安装Matlab出现Error 1935错误解决方法

    1.开始 - 运行(输入regedit.exe)- 确定或者回车,打开注册表编辑器: 2.在打开的注册表编辑器中找到:HKEY_LOCAL_MACHINE ,并展开:HKEY_LOCAL_MACHIN ...