Bacterial Melee

我们发现所有合法串都是原序列的某个子序列(这个子序列相邻元素相等) 的扩展, 比如子序列为abc, 那么aabbbc, abbbcc 等都是合法串。

所以我们只需要dp出原串有多少相邻元素不同的子序列就好啦。

#include<bits/stdc++.h>
#define LL long long
#define fi first
#define se second
#define mk make_pair
#define PLL pair<LL, LL>
#define PLI pair<LL, int>
#define PII pair<int, int>
#define SZ(x) ((int)x.size())
#define ull unsigned long long
using namespace std;const int N = 5000 + 7;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 + 7;
const double eps = 1e-8;int n, f[N][26], g[N][26];
int comb[N][N];
char s[N];
bool vis[26];inline void add(int &a, int b) {a += b; if(a >= mod) a -= mod;
}int main() {for(int i = 0; i < N; i++)for(int j = comb[i][0] = 1; j <= i; j++)comb[i][j] = (comb[i - 1][j - 1] + comb[i - 1][j]) % mod;scanf("%d%s", &n, s + 1);f[1][s[1] - 'a'] = 1; vis[s[1] - 'a'] = true;for(int i = 2; i <= n; i++) {memcpy(g, f, sizeof(g));for(int j = i - 1; j >= 1; j--) {for(int k = 0; k < 26; k++) {if(k != s[i] - 'a') add(f[j + 1][s[i] - 'a'], g[j][k]);}add(f[j + 1][s[i] - 'a'], mod - g[j + 1][s[i] - 'a']);}if(!vis[s[i] - 'a']) {vis[s[i] - 'a'] = true;f[1][s[i] - 'a'] = 1;}}int ans = 0;for(int i = 1; i <= n; i++)for(int j = 0; j < 26; j++)add(ans, 1ll * comb[n - 1][i - 1] * f[i][j] % mod);printf("%d\n", ans);return 0;
}/*
*/

转载于:https://www.cnblogs.com/CJLHY/p/10508250.html

Codeforces 356D Bacterial Melee dp相关推荐

  1. Codeforces 919D Substring (拓扑图DP)

    Codeforces 919D Substring (拓扑图DP) 手动博客搬家: 本文发表于20180716 10:53:12, 原地址https://blog.csdn.net/suncongbo ...

  2. [CodeForces 332B]Maximum Absurdity[DP]

    题目链接: [CodeForces 332B]Maximum Absurdity[DP] 题意分析: 寻找两个不重叠的长度为k的子串,使得它们之和最大. 解题思路: 第一想法是,处理出从这个点开始,长 ...

  3. 【CodeForces 1042B --- Vitamins】DP+位运算

    [CodeForces 1042B --- Vitamins]DP+位运算 题目来源:点击进入[CodeForces 1042B - Vitamins] Description Berland sho ...

  4. Bacterial Melee CodeForces - 756D (dp去重)

    大意: 给定字符串, 每次可以任选一个字符$x$, 将$x$左侧或右侧也改为$x$, 求最终能得到多少种字符串. 首先可以观察到最终字符串将连续相同字符合并后一定是原字符串的子序列 并且可以观察到相同 ...

  5. [CodeForces 300D Painting Square]DP

    http://codeforces.com/problemset/problem/300/D 题意:每一次操作可以选一个正方形,令边长为n,如果n为奇数那么可以从中间画一个十字,分成4个大小相等的边长 ...

  6. Codeforces 1322D Reality Show (DP)

    题目链接 https://codeforces.com/contest/1322/problem/D 题面写得非常模糊,很容易读错题,建议参考翻译:https://www.luogu.com.cn/p ...

  7. CodeForces - 1579G Minimal Coverage(dp)

    题目链接:点击查看 题目大意:给出 nnn 个长度不同的木棍.设第 i−1i-1i−1 次放置木棍后的终点为 xxx,那么第 iii 个木棍有且仅有两种放置方法: 放到 [x+1,x+a[i]][x+ ...

  8. CodeForces - 1562E Rescue Niwen!(dp)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的字符串 sss,将其子串按顺序展开成序列,即 {s1,s1s2,⋯,s1s2-sn,s2,s2s3,s2s3-sn,s3,s3s4,⋯,sn−1 ...

  9. CodeForces - 1551E Fixed Points(dp)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,需要求出删掉最少的数字,使得剩下的数字至少有 kkk 个位置满足 a[i]=ia[i]=ia[i]=i 成立 题目分析:看完数据范围不难想 ...

最新文章

  1. pythondjango讲解_Django框架全面讲解
  2. 3.1、final、finally、 finalize
  3. 从 StarCraft 2 Installer.exe 中提取种子文件
  4. 【深度学习】一文看尽深度学习各领域最新突破
  5. linux系统从开机到登录之前的启动流程
  6. springboot 前缀_springboot插件式开发框架
  7. odoo10参考系列--Odoo中的安全机制
  8. ios侧滑返回:完美解决 interactivePopGestureRecognizer 卡住的问题
  9. 计算机辅助设计工业产品cad竞赛试题,2017工业产品设计CAD比赛试题
  10. pe系统如何读取手机_在酷安你甚至可以学到如何用手机充当启动盘进PE(多图警告)...
  11. 网络蜘蛛Spider简介
  12. 报童问题求解最大利润_选对方法,速解行测最大利润问题
  13. Unity Wwise 自己使用
  14. PCM音频压缩A-Law算法,uLaw
  15. recordcount=-1的原因以及解决方法
  16. ANT:修改测试报告的样式jmeter-results-shanhe-me.xs
  17. php 牛顿冷却定律,基于用户投票的排名算法(四):牛顿冷却定律
  18. 期末前端web大作业:餐饮美食网站设计与实现——美食菜品网页(16页)
  19. Centos8安装GitLab14.2开源代码托管工具
  20. 推荐六款图片素材网站

热门文章

  1. Maven与nexus
  2. np.title函数作用
  3. NETSCOUT宣布推出Omnis Cyber Intelligence解决方案
  4. javascript怎么清空一个div里面的内容
  5. 电脑文件管理,教你批量给全部文件夹名称随机命名
  6. 10_SkyWalking
  7. 3000万存款的陈奕迅哭穷,真不是无病呻吟!
  8. Android网易新闻评论盖楼效果的实现
  9. 计算机sng,腾讯高级执行副总裁汤道生:腾讯SNG正在大力布局人工智能
  10. 收藏了4年的android app源码下载