[Codeforces 17C] Balance
Brief Introduction:
给定一个仅由abc组成的字符串,每个字符可以向左右延展,求最终新的平衡字符串的个数。
Algorithm:
关键点在于变换前后字符串中字符的相对位置不会发生改变
也就是说,将前后字符串unique后,B是A的子序列
问题转化为求A得子序列数
这样直接使用dp[cur][i][j][k] 配合 next[i][char] 转移即可
不过在实际实现中可以不用unique,直接在原字符串上转移也是同样的效果
Code:
#include <bits/stdc++.h> using namespace std;
const int m=; int n,nxt[][],dp[][][][],res=;
char dat[]; bool check(int a,int b,int c)
{
if(abs(a-b)>) return false;
if(abs(a-c)>) return false;
if(abs(b-c)>) return false;
return true;
} int main()
{
cin >> n;
for(int i=;i<=n;i++) cin >> dat[i]; for(int i=n;i;i--)
{
nxt[i][]=nxt[i+][],nxt[i][]=nxt[i+][];
nxt[i][]=nxt[i+][],nxt[i][dat[i]-'a']=i;
} int most=n/+;dp[][][][]=;
for(int cur=;cur<=n;cur++)
for(int i=;i<=most;i++)
for(int j=;j<=most;j++)
for(int k=;k<=most;k++)
if(dp[cur][i][j][k])
{
if(i+j+k==n && check(i,j,k)) //向答案贡献的条件
res=(res+dp[cur][i][j][k])%m; int &a=dp[nxt[cur][]][i+][j][k];
int &b=dp[nxt[cur][]][i][j+][k];
int &c=dp[nxt[cur][]][i][j][k+];
a=(a+dp[cur][i][j][k])%m;
b=(b+dp[cur][i][j][k])%m;
c=(c+dp[cur][i][j][k])%m;
}
cout << res;
return ;
}
Review:
抓住不变量解题,发现相对位置不变使用类似 完全背包 的DP解题
[Codeforces 17C] Balance的更多相关文章
- codeforces 17C Balance(动态规划)
codeforces 17C Balance 题意 给定一个串,字符集{'a', 'b', 'c'},操作是:选定相邻的两个字符,把其中一个变成另一个.可以做0次或者多次,问最后可以生成多少种,使得任 ...
- 近期做的一些DP
UVa 1625 color length https://blog.csdn.net/Dylan_Frank/article/details/52261424 https://www.cnblogs ...
- 【Codeforces自我陶醉水题篇~】(差17C code....)
Codeforces17A 题意: 有一种素数会等于两个相邻的素数相加 如果在2~n的范围内有至少k个这样的素数,就YES,否则就NO; 思路: 采用直接打表,后面判断一下就好了.那个预处理素数表还是 ...
- Codeforces
Codeforces 7E #include <iostream> #include <cstring> #include <cstdio> #include &l ...
- Codeforces Beta Round #17 C. Balance DP
C. Balance 题目链接 http://codeforces.com/contest/17/problem/C 题面 Nick likes strings very much, he likes ...
- Codeforces Beta Round #17 C. Balance (字符串计数 dp)
C. Balance time limit per test 3 seconds memory limit per test 128 megabytes input standard input ou ...
- Codeforces Round #599 (Div. 1) C. Sum Balance 图论 dp
C. Sum Balance Ujan has a lot of numbers in his boxes. He likes order and balance, so he decided to ...
- Codeforces Round #599 (Div. 2) E. Sum Balance
这题写起来真的有点麻烦,按照官方题解的写法 先建图,然后求强连通分量,然后判断掉不符合条件的换 最后做dp转移即可 虽然看起来复杂度很高,但是n只有15,所以问题不大 #include <ios ...
- [Codeforces 1242C]Sum Balance
Description 题库链接 给你 \(k\) 个盒子,第 \(i\) 个盒子中有 \(n_i\) 个数,第 \(j\) 个数为 \(x_{i,j}\).现在让你进行 \(k\) 次操作,第 \( ...
随机推荐
- vue父组件中修改子组件样式
1. 使用全局样式 <style> /* 全局样式 */ </style> <style scoped> /* 本地样式 */ </style> 2. ...
- Treap 模板
感觉平衡树也没有以前想的那么玄乎,(其实set超好用的),非旋式Treap挺好理解,和可并堆,二叉搜索树有很大联系 推荐博客:http://memphis.is-programmer.com/post ...
- MySQL的字符集小结
正确了解MySQL的字符集问题,能够从根本上解决乱码的困扰. 首先,MySQL的字符集问题主要是两个概念,一个是Character Sets,一个是Collations,前者是字符内容及编码,后者是对 ...
- [Usaco2015 dec]Max Flow 树上差分
[Usaco2015 dec]Max Flow Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 353 Solved: 236[Submit][Sta ...
- Flume的安装,配置及使用
1,上传jar包 2,解压 3,改名 4,更改配置文件 将template文件重镜像 root@Ubuntu-1:/usr/local/apache-flume/conf# cat flume-env ...
- Bzoj1917 [Ctsc2010]星际旅行
Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 185 Solved: 118 Description 公元3000年,地球联盟已经攻占了银河系内的N ...
- [BZOJ1040] [ZJOI2008]骑士 解题报告
Description Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬.最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的侵略战争.战火 ...
- #error#错误原因:Cannot find executable for CFBundle 0x8ad60b0 (not loaded)
#error#错误原因:Cannot find executable for CFBundle 0x8ad60b0 </Applications/Xcode.app/Contents/Devel ...
- hdu 2112 HDU Today (最短路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2112 题目大意:给出起点和终点,然后算出最短的路. 不过有好多细节要注意: (1)起始点和终止点相等的 ...
- IPsec传输模式下ESP报文的装包和拆包过程
原创文章,拒绝转载 装包过程 总体流程图 过程描述 在原IP报文中找到TCP报文部分,在其后添加相应的ESP trailer信息. ESP trailer 包含三部分:Padding,Pad leng ...