传送门:https://ac.nowcoder.com/acm/contest/326/B

题意:给你一个n,你需有找有多少个长度从1~n 的单词,满足最长连续元音少于A个并且最长连续辅音长度少于B。

题解:我们定义dp的状态是,dp1[i][j]表示长度为i的,最长连续元音长度为j的单词的个数,

dp2[i][j]表示长度为i的,最长连续辅音长度为j的单词的个数

由于元音的个数为5个可以任意取,辅音的个数为21个可以任意取

转移方程就是dp1[i][j]=(dp1[i][j]+dp1[i-1][j-1])*5,dp2[i][j]=(dp2[i][j]+dp2[i-1][j-1])*21

每次转移完记得更新dp1[i][1] 的状态和dp2[i][1]的状态,即前面全部是元音/辅音,但是后面变成辅音/元音时的个数

计数时记得取模

代码如下:

  1. #include <map>
  2. #include <set>
  3. #include <cmath>
  4. #include <ctime>
  5. #include <stack>
  6. #include <queue>
  7. #include <cstdio>
  8. #include <cctype>
  9. #include <bitset>
  10. #include <string>
  11. #include <vector>
  12. #include <cstring>
  13. #include <iostream>
  14. #include <algorithm>
  15. #include <functional>
  16. #define PI acos(-1)
  17. #define eps 1e-8
  18. #define fuck(x) cout<<#x<<" = "<<x<<endl;
  19. #define lson l,mid,rt<<1
  20. #define rson mid+1,r,rt<<1|1
  21. #define FIN freopen("input.txt","r",stdin);
  22. #define FOUT freopen("output.txt","w+",stdout);
  23. //#pragma comment(linker, "/STACK:102400000,102400000")
  24. using namespace std;
  25. typedef long long LL;
  26. typedef unsigned long long ull;
  27. typedef pair<int, int> PII;
  28. const int maxn = 3e5 + ;
  29. const LL INF = 1e18 + ;
  30. const ull mod = 1e9 + ;
  31. LL gcd(LL a, LL b) {return b ? gcd(b, a % b) : a;}
  32. LL lcm(LL a, LL b) {return a / gcd(a, b) * b;}
  33. LL powmod(LL a, LL b, LL MOD) {LL ans = ; while (b) {if (b % )ans = ans * a % MOD; a = a * a % MOD; b /= ;} return ans;}
  34. double dpow(double a, LL b) {double ans = 1.0; while (b) {if (b % )ans = ans * a; a = a * a; b /= ;} return ans;}
  35.  
  36. LL dp1[][];
  37. LL dp2[][];
  38. int main() {
  39. #ifndef ONLINE_JUDGE
  40. FIN
  41. #endif
  42. int T;
  43. scanf("%d", &T);
  44. while (T--) {
  45. memset(dp1,,sizeof(dp1));
  46. memset(dp2,,sizeof(dp2));
  47. int n, a, b;
  48. cin >> n >> a >> b;
  49. LL ans = ;
  50. dp1[][] = ;
  51. dp2[][] = ;
  52.  
  53. for (int i = ; i <= n; i++) {
  54. LL sum1 = ;
  55. LL sum2 = ;
  56. for (int j = ; j <= min(a,i); j++) {
  57. dp1[i][j] = (dp1[i][j] + dp1[i - ][j - ] * ) % mod;
  58. sum1 = (sum1 + dp1[i - ][j]) % mod;
  59. }
  60. for (int j = ; j <= min(b,i); j++) {
  61. dp2[i][j] = (dp2[i][j] + dp2[i - ][j - ] * ) % mod;
  62. sum2 = (sum2 + dp2[i - ][j]) % mod;
  63. }
  64. dp1[i][] = (dp1[i][] + sum2 * % mod) % mod;
  65. dp2[i][] = (dp2[i][] + sum1 * % mod) % mod;
  66. }
  67. for (int i = ; i <= n; i++) {
  68. for (int j = ; j <= a; j++) {
  69. ans = (ans + dp1[i][j]) % mod;
  70. }
  71. for (int j = ; j <= b; j++) {
  72. ans = (ans + dp2[i][j]) % mod;
  73. }
  74. }
  75. cout << ans << endl;
  76. }
  77. }

牛客326B 背单词的更多相关文章

  1. 牛客练习赛35-背单词-线性DP

    背单词 思路 :dp[ i ]  [ 0 ]表示 第i 位放的元音  dp[ i ]  [ 1 ]表示 第i 位放的辅音 ,cnt [ i ]含义是 长度为 i 的方案数. 转移  :dp[ i ]  ...

  2. 反转单词顺序列 牛客网 剑指Offer

    反转单词顺序列 牛客网 剑指Offer 题目描述 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但 ...

  3. 牛客新年AK场之模拟二维数组

    链接:https://ac.nowcoder.com/acm/contest/3800/D来源:牛客网 题目描述 Rinne 喜欢使用一种奇怪的方法背单词,现在这些单词被放在了一个 n×mn \tim ...

  4. 做中学(Learning by Doing)之背单词-扇贝网推荐

    做中学(Learning by Doing)之背单词-扇贝网推荐 看完杨贵福老师(博客,知乎专栏,豆瓣)的「继续背单词,8个月过去了」,我就有写这篇文章的冲动了,杨老师说: 有时候我会感觉非常后悔,如 ...

  5. [No000014]听说不背单词,考英语会是这种下场-我们为什么必须背单词?

    由于英语对于一个程序员来说,重要性你懂得.因此我会开始逐渐在博客上加入英语的一些东西. 听说不背单词,考英语会是这种下场 在中国, 「学英语」大抵遵循着这样一条 罗蒙诺索夫质量守恒定律 因为英语学着学 ...

  6. 使用Excel背单词-高效-简单

    背单词是一个很纠结的事,想必那些走在留学路上的很多人都被英语这一关卡住了,这里,笔者就聊聊,不讲背单词的方法,只提供使用vb开发的产品和使用方法,有问题欢迎讨论. 简介:使用excel背单词,有一些人 ...

  7. 【面试笔试算法】牛客网一站通Offer编程题2016.4.19

    牛客网一站通offer (一)字符串变形 1. 题目: 对于一个给定的字符串,我们需要在线性(也就是O(n))的时间里对它做一些变形.首先这个字符串中包含着一些空格,就像"Hello Wor ...

  8. 牛客网《BAT面试算法精品课》学习笔记

    目录 牛客网<BAT面试算法精品课>学习笔记 牛客网<BAT面试算法精品课>笔记一:排序 牛客网<BAT面试算法精品课>笔记二:字符串 牛客网<BAT面试算法 ...

  9. 基于百词斩和扇贝单词的背单词APP软件测试

    概述 背单词APP是非常受大学生青睐的手机应用,但它的发展尚未成熟,存在一些缺陷.我们决定深入地分析一组典型的背单词APP:百词斩(A产品).扇贝单词(B产品),寻找当前背单词APP中的提升空间.下面 ...

随机推荐

  1. leetcode-帕斯卡三角形

    帕斯卡三角形 给定一个非负整数 numRows,生成杨辉三角的前 numRows 行. 示例: 输入: 5 输出: [ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4 ...

  2. HDFS essay 2 - Clarify Name Node / Checkpoint Node/ Backup Node

    为什么想用英文写了?我获取知识.技术的大部分途径都是通过英文,所以按照自己的理解用英文写下来也比较容易,另外,很多term都是不能翻译的,如果要持续学习技术和知识,那就不但要习惯去阅读,听,还要写,说 ...

  3. Leetcode - 461. Hamming Distance n&=(n-1) (C++)

    1. 题目链接:https://leetcode.com/problems/hamming-distance/description/ 2.思路 常规做法做完看到评论区一个非常有意思的做法.用了n&a ...

  4. 深入了解View的绘制流程

    1.  ViewRoot ViewRoot是连接WindowManager与DecorView的纽带,View的整个绘制流程的三大步(measure.layout.draw)都是通过ViewRoot完 ...

  5. .net 简体转换繁体实例,繁体转换简体 Encode.dll、下载

    在项目中先引用Encode.dll  下面是下载地址: Encode.dll ChineseConverter.dll 1.html页面代码 <%@ Page Language="C# ...

  6. mysql 时区问题:The server time zone value '???ú±ê×??±??' is unrecognized

    org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: java.sql.SQLE ...

  7. mysqlslap工具测试mysql DB的性能

    mysqlslap的一个主要工作场景就是对数据库服务器做基准测试.     测试方法 1.测试工具:mysqlslap,mysqlslap是MySQL5.1.4之后自带的benchmark基准测试工具 ...

  8. Activiti5工作流笔记一

    介绍工作流 网上工作流的定义一大堆,这里就不去复制了,通俗的理解,工作流就是类似OA系统中请假审批.报销审批等一系列流程,下级提交的申请只有直系领导才能审批,其他人是没有权限的,而只有直系领导审批通过 ...

  9. 【刷题】洛谷 P3804 【模板】后缀自动机

    题目描述 给定一个只包含小写字母的字符串 \(S\) , 请你求出 \(S\) 的所有出现次数不为 \(1\) 的子串的出现次数乘上该子串长度的最大值. 输入输出格式 输入格式: 一行一个仅包含小写字 ...

  10. [LOJ #6433]「PKUSC2018」最大前缀和

    题目大意:给你一个$n(n\leqslant20)$项的数列$A$,设重排后的数列为$A'$,令$pre_p=\sum\limits_{i=1}^pA'_i$,求$max\{pre_i\}$的期望,乘 ...