算法训练 Cowboys(DP)
测试样例二中,可能的初始排列为:"AABBB"和"BABBA"。
#include<bits/stdc++.h>
using namespace std;
long long dp[][]={};
int main(){
dp[][]=;
dp[][]=;
dp[][]=;
dp[][]=;
for(int i=;i<=;i++){ //打表dp情况数
dp[i][]=dp[i-][];
dp[i][]=dp[i-][];
dp[i][]=dp[i-][]+dp[i-][];
dp[i][]=dp[i-][];
}
string target;
int length,i;
while(cin>>target){
length=target.size();
string tmp1="",tmp2=""; //检查是否存在全A或者全B情况
for(int k=;i<length;k++){
tmp1+="A";
tmp2+="B";
}
if(target==tmp1||target==tmp2){
cout<<<<endl;
return ;
}
if(length%==){
tmp1="";
tmp2="";
for(int i=;i<=length/;i++){ //检查是否全串都是一个BA串!
tmp1+="AB";
tmp2+="BA";
}
if(tmp1==target||tmp2==target){
cout<<dp[length/-][]+dp[length/-][]<<endl;
return ;
}
}
for(i=;i<length;i++){ //找到第一组BA开始位置
if(target[i]=='B'&&target[(i+)%length]=='A'){
break;
}
} for(int j=i;;j=(j+)%length){ //找到第一组BA结束位置
if(target[j]!='B'||target[(j+)%length]!='A'){
i=j;
break;
}
}
int times=,start,end;
long long ans=;
for(int j=i;j<i+length;j++){
if(target[j%length]=='B'&&target[(j+)%length]=='A'){
if(times==){
start=(j+length-)%length; //记录开始位置,记得-1
}
times++;
j++; //循环中有++那么这里再++就够了
}
else {
if(times!=){ //如果已经记录了BA组数
end=j%length; //记录结束位置
if(target[start]=='A'&&target[end]=='A') ans*=dp[times][];
else if(target[start]=='A'&&target[end]=='B') ans*=dp[times][];
else if(target[start]=='B'&&target[end]=='A') ans*=dp[times][];
else if(target[start]=='B'&&target[end]=='B') ans*=dp[times][];
times=; //一个串记录的组数清零
}
}
}
if(times!=){ //别忘了最后一组!看我实现构造的方法,最后一组是被忽略掉的
end=i%length;
if(target[start]=='A'&&target[end]=='A') ans*=dp[times][];
else if(target[start]=='A'&&target[end]=='B') ans*=dp[times][];
else if(target[start]=='B'&&target[end]=='A') ans*=dp[times][];
else if(target[start]=='B'&&target[end]=='B') ans*=dp[times][];
} cout<<ans<<endl;
}
return ;
}
没看懂系列(((((
算法训练 Cowboys(DP)的更多相关文章
- Java实现 蓝桥杯 算法训练 Cowboys
试题 算法训练 Cowboys 问题描述 一个间不容发的时刻:n个牛仔站立于一个环中,并且每个牛仔都用左轮手枪指着他旁边的人!每个牛仔指着他顺时针或者逆时针方向上的相邻的人.正如很多西部片那样,在这一 ...
- 算法训练 最大的算式 DP
算法训练 最大的算式 时间限制:1.0s 内存限制:256.0MB 问题描述 题目很简单,给出N个数字,不改变它们的相对位置,在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终结果 ...
- 算法训练 K好数
算法训练 K好数 时间限制:1.0s 内存限制:256.0MB 问题描述 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K进制数中K好数 ...
- 算法训练 K好数 解析
算法训练 K好数 时间限制:1.0s 内存限制:256.0MB 提交此题 锦囊1 锦囊2 问题描述 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K ...
- 蓝桥杯 算法训练 ALGO-116 最大的算式
算法训练 最大的算式 时间限制:1.0s 内存限制:256.0MB 问题描述 题目很简单,给出N个数字,不改变它们的相对位置,在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终结果尽量 ...
- 算法训练 K好数(C/C++)AC码
蓝桥杯 算法训练 K好数 AC码 题目要求: 算法训练 K好数 问题描述 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K进制数中K好数的数目.例如 ...
- 蓝桥杯 算法训练 ALGO-36 传纸条
算法训练 传纸条 时间限制:1.0s 内存限制:512.0MB 问题描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而 ...
- 蓝桥杯 算法训练 ALGO-21 装箱问题
算法训练 装箱问题 时间限制:1.0s 内存限制:256.0MB 问题描述 有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30),每 ...
- [算法模版]子序列DP
[算法模版]子序列DP 如何求本质不同子序列个数? 朴素DP 复杂度为\(O(nq)\).其中\(q\)为字符集大小. \(dp[i]\)代表以第\(i\)个数结尾的本质不同子序列个数.注意,这里对于 ...
随机推荐
- laravel 接收json串
在做项目的时候发现 用平时的$request->all() 无法获取到请求值 然后这样解决了 但是还是不知道原因 学习源头: http://www.cnblogs.com/anjuncc/p/5 ...
- MySQL的varchar类型注意事项
前几天就在工作中发现这样一个问题:当某个字段的类型为varchar时,字段保存的值类似'100,200,300' 和 '100' 或 '100,400'.写SQL语句的时候就会犯这样的错误,例如: ...
- 机器学习:使用scikit-learn库中的网格搜索调参
一.scikit-learn库中的网格搜索调参 1)网格搜索的目的: 找到最佳分类器及其参数: 2)网格搜索的步骤: 得到原始数据 切分原始数据 创建/调用机器学习算法对象 调用并实例化scikit- ...
- select *和select 全部
select *和select 全部字段 在查询上效果是一样的,速度也是一样的. 不过理论上来说select *反而会快点. 因为 1.select 全部字段在数据传输上消耗会更多,如果几百个字段这个 ...
- RabbitMQ 消息队列 应用
安装参考 详细介绍 学习参考 RabbitMQ 消息队列 RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public License开源协议. M ...
- paramiko远程
安装paramiko后,看下面例子: 复制代码代码如下: import paramiko #设置ssh连接的远程主机地址和端口t=paramiko.Transport((ip,port))#设置登录名 ...
- windows配置apache tomcat 集群
1,安装包 httpd-2.2.22-win32-x86-no_ssl.msi 两个tomcat6 2,配置apachehttpd---配置的过程中有错误可以查看logs文件夹下的log文件进行排 ...
- ajax补充FormData
一.回顾上节知识点 1.什么是json字符串? 轻量级的数据交换格式 2.定时器:关于setTimeout setTimeout(foo,3000) # 3000表示3秒,foo表示一个函数,3秒后 ...
- javascript——对象的概念——函数 2 (内建函数与类型转换)
javascript 有许多内建函数,用于各种操作,以下为常用的内建方法. 1.parseInt(object,int):将输入的 int 进制的值 object 转换为 10 进制的数值: obje ...
- 安卓读取SD卡的容量
在开发中,我们经常会用到SD卡,那么在对SD卡进行读写的时候,我们经常需要判断SD卡的剩余容量是否足够.因此,这次我们来写写获取SD卡容量的程序. 该注意的地方,我都在程序里面有注明了.看程序基本就懂 ...