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

【题意】

出现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 here
new 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());
}
}
}

【Lqb T336】Cowboys的更多相关文章

  1. 【AR实验室】mulberryAR : ORBSLAM2+VVSION

    本文转载请注明出处 —— polobymulberry-博客园 0x00 - 前言 mulberryAR是我业余时间弄的一个AR引擎,目前主要支持单目视觉SLAM+3D渲染,并且支持iOS端,但是该引 ...

  2. 【.net 深呼吸】细说CodeDom(1):结构大观

    CodeDom 是啥东东?Html Dom听过吧,XML Dom听过吧.DOM一般可翻译为 文档对象模型,那 Code + DOM呢,自然是指代码文档模型了.如果你从来没接触过 CodeDom,你大概 ...

  3. 【Machine Learning】KNN算法虹膜图片识别

    K-近邻算法虹膜图片识别实战 作者:白宁超 2017年1月3日18:26:33 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  4. 【前端性能】高性能滚动 scroll 及页面渲染优化

    最近在研究页面渲染及web动画的性能问题,以及拜读<CSS SECRET>(CSS揭秘)这本大作. 本文主要想谈谈页面优化之滚动优化. 主要内容包括了为何需要优化滚动事件,滚动与页面渲染的 ...

  5. 【深入浅出jQuery】源码浅析--整体架构

    最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...

  6. 【.net 深呼吸】程序集的热更新

    当一个程序集被加载使用的时候,出于数据的完整性和安全性考虑,程序集文件(在99.9998%的情况下是.dll文件)会被锁定,如果此时你想更新程序集(实际上是替换dll文件),是不可以操作的,这时你得把 ...

  7. 【.net 深呼吸】跨应用程序域执行程序集

    应用程序域,你在网上可以查到它的定义,凡是概念性的东西,大伙儿只需要会搜索就行,内容看了就罢,不用去记忆,更不用去背,“名词解释”是大学考试里面最无聊最没水平的题型. 简单地说,应用程序域让你可以在一 ...

  8. 【Web动画】SVG 实现复杂线条动画

    在上一篇文章中,我们初步实现了一些利用基本图形就能完成的线条动画: [Web动画]SVG 线条动画入门 当然,事物都是朝着熵增焓减的方向发展的,复杂线条也肯定比有序线条要多. 很多时候,我们无法人工去 ...

  9. 【Web动画】SVG 线条动画入门

    通常我们说的 Web 动画,包含了三大类. CSS3 动画 javascript 动画(canvas) html 动画(SVG) 个人认为 3 种动画各有优劣,实际应用中根据掌握情况作出取舍,本文讨论 ...

随机推荐

  1. http报文和协议首部

    http报文和协议首部 http报文 3>报文格式 request 报文 <method> <request-URL> <version> <heade ...

  2. spring cloud config搭建说明例子(二)-添加eureka

    添加注册eureka 服务端 ConfigServer pom.xml <dependency> <groupId>org.springframework.cloud</ ...

  3. 大数高精度加减乘除 51nod 1005 大数加法

    1005 大数加法 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 给出2个大整数A,B,计算A+B的结果. Input 第1行:大数A 第2行:大数B ...

  4. UC浏览器中,设置了position: fixed 的元素会遮挡z-index值更高的同辈元素

    "UC浏览器中,设置了position: fixed 的元素会遮挡z-index值更高的同辈元素(非fixed)." 我们使用的artDialog弹窗中,在UC浏览器中,如果页面高 ...

  5. 283 Move Zeroes 移动零

    给定一个数组 nums, 编写一个函数将所有 0 移动到它的末尾,同时保持非零元素的相对顺序.例如, 定义 nums = [0, 1, 0, 3, 12],调用函数之后, nums 应为 [1, 3, ...

  6. mysql timeout expired处理

    一.发现问题 二.分析问题 .net长时间连接mysql导致超时: 方式一:连接用完后,就关闭连接 方式二:增加C#的执行sqlcommand时间 三.解决问题 增加了这一句,问题解决了 using ...

  7. 对socket的理解

    要想理解socket,就得先熟悉TCP/IP协议族,TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,定义了主机如 ...

  8. express模块安装使用命令配置

    之前的博客nodejs安装和配置好路径之后就可以安装express了: 随便打开个文件夹右键选择,git bash here 命令行里输入[npm install express -g] -g是全局安 ...

  9. redis 数据类型Hash

    redis的Hash数据类型: hash数据类型 Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象. 创建map: hmset map c & ...

  10. [Windows Server 2012] SQL Server 备份和还原方法

    ★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com ★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频. ★ 本节我们将带领大家:SQL S ...