【链接】 我是链接,点我呀:)
【题意】

出现AB就要交换一下
给你结果序列
问你原序列有多少种可能
首尾可以交换.

【题解】


dp[i][0]表示i和i-1不交换,达到前i个字符序列的状态的方案数
dp[i][1]表示i和i-1交换,达到前i个字符序列的状态的方案数
对于
s[i-1] s[i]
A B
B A
A A
B B
这四种情况分类讨论一下就好.
只要记着如果遇到了AB一定要交换就好
然后就不难想到转移方法
(转移方法在代码里看就好)

然后上面这种是首尾不交换的方案.
还需要考虑一种就是首尾可以交换的方案数.
这个时候,只需要把首部和尾部强行交换一下就好
然后在中间的n-2个数字再做一下相同的DP就好

方案数累加两次

【代码】

import java.io.*;
import java.util.*;public class Main {static InputReader in;static PrintWriter out;public static void main(String[] args) throws IOException{//InputStream ins = new FileInputStream("E:\\rush.txt");InputStream ins = System.in;in = new InputReader(ins);out = new PrintWriter(System.out);//code start from herenew Task().solve(in, out);out.close();}static int N = 1000;static class Task{String s;int n;int dp[][];public void solve(InputReader in,PrintWriter out) {dp = new int[N+10][2];s = in.next();n = s.length();dp[0][0] = 1;dp[1][0] = 1;for (int ii = 1;ii < n;ii++){int i = ii+1;if (s.charAt(ii-1)=='A' && s.charAt(ii)=='B') {dp[i][0] = dp[i-1][1];dp[i][1] = 0;}if (s.charAt(ii-1)=='B' && s.charAt(ii)=='A') {dp[i][0] = dp[i-1][0] + dp[i-1][1];dp[i][1] = dp[i-2][0] + dp[i-2][1];}if (s.charAt(ii-1)==s.charAt(ii)) {dp[i][1] = 0;dp[i][0] = dp[i-1][0]+dp[i-1][1];}}int ans = 0;ans = dp[n][0]+dp[n][1];if (s.charAt(n-1)=='B' && s.charAt(0)=='A') {StringBuilder sb = new StringBuilder(s);sb.setCharAt(n-1, 'A');sb.setCharAt(0, 'B');for (int i = 0;i <= n;i++)for (int j = 0;j < 2;j++)dp[i][j] = 0;dp[1][1] = 1;for (int ii = 1;ii <n-1;ii++) {int i = ii+1;if (s.charAt(ii-1)=='A' && s.charAt(ii)=='B') {dp[i][0] = dp[i-1][1];dp[i][1] = 0;}if (s.charAt(ii-1)=='B' && s.charAt(ii)=='A') {dp[i][0] = dp[i-1][0] + dp[i-1][1];dp[i][1] = dp[i-2][0] + dp[i-2][1];}if (s.charAt(ii-1)==s.charAt(ii)) {dp[i][1] = 0;dp[i][0] = dp[i-1][0]+dp[i-1][1];}}ans = ans + dp[n-1][0] + dp[n-1][1];}out.println(ans);}}static class InputReader{public BufferedReader br;public StringTokenizer tokenizer;public InputReader(InputStream ins) {br = new BufferedReader(new InputStreamReader(ins));tokenizer = null;}public String next(){while (tokenizer==null || !tokenizer.hasMoreTokens()) {try {tokenizer = new StringTokenizer(br.readLine());}catch(IOException e) {throw new RuntimeException(e);}}return tokenizer.nextToken();}public int nextInt() {return Integer.parseInt(next());}}
}

转载于:https://www.cnblogs.com/AWCXV/p/10424345.html

【Lqb T336】Cowboys相关推荐

  1. 【阶段小结】协同开发——这学期的Git使用小结

    [阶段小结]协同开发--这学期的Git使用小结 一.Git简介 1. Git简单介绍 2. Git工作流程以及各个区域 3. Git文件状态变化 二.Git安装&Git基本配置 三.个人踩坑 ...

  2. 【Kaggle Learn】Python 1-4

    [Kaggle Learn]Python https://www.kaggle.com/learn/python 一. Hello, Python A quick introduction to Py ...

  3. 【C#实践】三层:初识

    通过一个用户登录的简单功能,第一次真实的接触三层架构. 以前在JSP到是听过一点,但是没有具体的用过,基本不会什么吧! 划分三层原因:将整个业务分为[显示层][业务逻辑层][数据源层] [显示层]:和 ...

  4. 1-2 用Python编写【房价预测】模型----paddle

    课程>我的课程>百度架构师手把手教深度学习>1-2 用Python编写[房价预测]模型> 1-2 用Python编写[房价预测]模型 paddle初级教程第一章 第二节 王然( ...

  5. ❤️让人心跳加速的陌陌案例,大数据必需学会的基础案例!❤️ 【推荐收藏】

    全网最详细的大数据HBase文章系列,强烈建议收藏加关注! 已列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 前言 陌陌案例 一.陌陌案例的需求说明 二.陌陌案例中表设计内容 1. ...

  6. 2021年大数据HBase(七):Hbase的架构!【建议收藏】

    全网最详细的大数据HBase文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 前言 Hbase的架构 一.Client 二.Master ...

  7. 2021年大数据HBase(六):HBase的高可用!【建议收藏】

    全网最详细的大数据HBase文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 前言 HBase的高可用 一.HBASE高可用的简介 二.搭 ...

  8. 2021年大数据HBase(四):HBase的相关操作-客户端命令式!【建议收藏】

    全网最详细的大数据HBase文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 前言 HBase的相关操作-客户端命令式 1.进入HBase ...

  9. 2021年大数据HBase(三):HBase数据模型!!!【建议收藏】

    全网最详细的大数据HBase文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 前言 Hbase数据模型 术语: 系列历史文章 2021年大 ...

最新文章

  1. 2021年春季学期-信号与系统-第四次作业参考答案
  2. python简单工厂模式_简单工厂模式-python语言实现
  3. 15年来这8门编程语言位置十分稳定,C#从低谷开始爬升
  4. 女朋友在家是怎么利用我的模型的​
  5. 算法设计与分析——回溯法——圆排列问题
  6. 2016 linux发行版排行_选择困难症必看!云服务器如何选择操作系统,Windows和Linux哪个更好?...
  7. C#程序在线升级代码---webservice
  8. ceph怎么搭建文件存储_SUSE专家谈Ceph落地之最佳实践
  9. 360极速浏览器连接远程notebook会出现问题,403 GET /api/kernels/
  10. Java并发编程:Lock(上)
  11. 2021年婴幼儿奶粉行业研究报告|洞见研报
  12. android自定义通知栏样式,Android 通知栏自定义样式
  13. win10下c语言哪个版本号,怎么查看我的电脑用的是win10的哪个版本?win10各版本之间的区别...
  14. 按快捷键进不去bios问题解决
  15. 【agc004e】Salvage Robots
  16. word两端对齐字的间距太大,怎么办?
  17. AOP层层递进 第一部分 代理
  18. TypeError: cannot astype a timedelta from [timedelta64[ns]] to [int32]
  19. Geany设置全黑色主题
  20. 注册宝网络验证系统,安全免费的网络验证系统

热门文章

  1. 从spaceX的火箭回收想到的一些事儿
  2. 用js实现点击切换+自动切换的轮播图
  3. cocos2dx内存优化
  4. 机器学习部分书籍推荐
  5. Q平台Audio集成开发 高通Audio术语缩写
  6. HaaS UI小程序解决方案基础教学之二: 搭建第一个UI页面
  7. postman使用put方法向华为云obs桶上传文件和图片
  8. Axure卸载元件库
  9. ARM体系结构(重制版)——九鼎创展 x210V3s
  10. java基础语言+面向对象_经典案例——65个