蓝桥杯 算法训练 Cowboys
测试样例二中,可能的初始排列为:"AABBB"和"BABBA"。
#include<iostream>
#include<string.h>
using namespace std;
int l;//l记录字符串s长度
int sum;//记录可能状态总数目(结果)
int dp[101][2];//记录每个牛仔的可能变化状态
char s[100];
void choose(int st,int ed)//从st到ed逐个分析状态并且根据前者状态dp[i-1][0/1]得出当前状态dp[i][0/1]
{dp[st][0]=1;dp[st][1]=0;while(st!=ed){st=(st+1)%l;if(s[st]==s[(st-1+l)%l])//当前st与前者st-1相同;(AA或BB){dp[st][0]=dp[(st-1+l)%l][0]+dp[(st-1+l)%l][1];dp[st][1]=0;}else if(s[st]-1==s[(st-1+l)%l])//当前st为B,前者st-1为A;(AB){dp[st][0]=dp[(st-1+l)%l][1];dp[st][1]=0;}else//当前st为A,前者st-1为B;(BA){dp[st][0]=dp[(st-1+l)%l][0]+dp[(st-1+l)%l][1];dp[st][1]=dp[(st-2+l)%l][0]+dp[(st-2+l)%l][1];if(dp[st][1]==0){dp[st][1]=1;}}}sum=dp[st][0]+dp[st][1];
}
int nochoose(int st,int ed)
{int temp=2;if(s[st]=='B') {if(s[(st+1)%l]=='A')//第一个BA前有BA情况{st=(st+2)%l;temp+=2;}else//BABBreturn 0;}if(s[ed]=='A'){if(s[(ed-1+l)%l]=='B'){ed=(ed-2+l)%l;temp+=2;}else//BAAAreturn 0;}if(temp>=l){sum=sum+1;return 0;}memset(dp,0,sizeof(dp));dp[st][0]=1;dp[st][1]=0;while(st!=ed){st=(st+1)%l;if(s[st]==s[(st-1+l)%l])//当前st与前者st-1相同;(AA或BB){dp[st][0]=dp[(st-1+l)%l][0]+dp[(st-1+l)%l][1];dp[st][1]=0;}else if(s[st]-1==s[(st-1+l)%l])//当前st为B,前者st-1为A;(AB){dp[st][0]=dp[(st-1+l)%l][1];dp[st][1]=0;}else//当前st为A,前者st-1为B;(BA){dp[st][0]=dp[(st-1+l)%l][0]+dp[(st-1+l)%l][1];dp[st][1]=dp[(st-2+l)%l][0]+dp[(st-2+l)%l][1];if(dp[st][1]==0){dp[st][1]=1;}}}return dp[st][0]+dp[st][1];
}
int main()
{cin>>s;l=strlen(s);int i;for(i=0;i<l;i++)//找到第一个BA,取出第一个BA的起始位置{if(s[i]-1==s[i+1])break;}//此时i为第一个BA的起始位置//进入选择choosechoose((i+2)%l,(i-1+l)%l);sum=sum + nochoose((i+2)%l,(i-1+l)%l);cout<<sum<<endl;return 0;
}
蓝桥杯 算法训练 Cowboys相关推荐
- Java实现 蓝桥杯 算法训练 Cowboys
试题 算法训练 Cowboys 问题描述 一个间不容发的时刻:n个牛仔站立于一个环中,并且每个牛仔都用左轮手枪指着他旁边的人!每个牛仔指着他顺时针或者逆时针方向上的相邻的人.正如很多西部片那样,在这一 ...
- 蓝桥杯 算法训练 Cowboys DP
算法训练 Cowboys 时间限制:2.0s 内存限制:256.0MB 问题描述 一个间不容发的时刻:n个牛仔站立于一个环中,并且每个牛仔都用左轮手枪指着他旁边的人!每个牛仔指着他顺时针或者逆时针 ...
- 蓝桥杯 算法训练 Cowboys By Assassin dp+字符串操作
问题描述一个间不容发的时刻:n个牛仔站立于一个环中,并且每个牛仔都用左轮手枪指着他旁边的人!每个牛仔指着他顺时针或者逆时针方向上的相邻的人.正如很多西部片那样,在这一刻,绳命是入刺的不可惜--对峙的场 ...
- 蓝桥杯 算法训练 Cowboys 递推 动态规划
问题描述 一个间不容发的时刻:n个牛仔站立于一个环中,并且每个牛仔都用左轮手枪指着他旁边的人!每个牛仔指着他顺时针或者逆时针方向上的相邻的人.正如很多西部片那样,在这一刻,绳命是入刺的不可惜--对峙的 ...
- 蓝桥杯 算法训练 幸运的店家
蓝桥杯 算法训练 幸运的店家 题目描述 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 炫炫开了一家商店,卖的货只有一个,XXX,XXX卖N元钱.有趣的是,世界上只有面值为3的幂的纸 ...
- 蓝桥杯 算法训练 Beaver's Calculator
蓝桥杯 算法训练 Beaver's Calculator 问题描述 从万能词典来的聪明的海狸已经使我们惊讶了一次.他开发了一种新的计算器,他将此命名为"Beaver's Calculator ...
- 蓝桥杯 算法训练 印章
蓝桥杯 算法训练 印章 共有n种图案的印章,每种图案的出现概率相同.小A买了m张印章,求小A集齐n种印章的概率. 输入输出: 一行两个正整数n和m 一个实数P表示答案,保留4位小数. 样例: 2 3 ...
- 蓝桥杯算法训练-24点(Python)
问题描述 24点游戏是一个非常有意思的游戏,很流行,玩法很简单:给你4张牌,每张牌上有数字(其中A代表1,J代表11,Q代表12,K代表13),你可以利用数学中的加.减.乘.除以及括号想办法得到24, ...
- 蓝桥杯——算法训练——数字三角形
蓝桥杯--算法训练--数字三角形 这道题不难,但是比较典型,可以作为动态规划(dp)的入门篇,属于线性dp(LIS,LCS和数字三角形都是此类题型). ------------------------ ...
最新文章
- 1132 Cut Integer
- 【.net深呼吸】动态类型(高级篇)
- NeatUpload的安装使用
- Android中集成Jpush实现推送消息通知与根据别名指定推送附示例代码下载
- Apache ab测试工具使用方法(无参、get传参、post传参)
- Openjudge NOI题库 ch0111/04 网线管理
- .NET架构小技巧(6)——什么是好的架构
- ArcGIS 的 http://localhost:8399/arcgis/rest/services 无法打开,显示404 的解决办法
- 人工智能 VS 机器学习 VS 深度学习
- 22Exchange Server 2010跨站点部署-邮件流测试及重定向
- TIMESTAMP与DATETIME的区别
- RHadoop搭建(HDFS+MapReduce)
- linux libaio介绍
- 八人抢答器讲解_八人智力竞赛抢答器课程设计报告
- 虚拟服务器开启打印端口号,打印机服务器虚拟端口设置方法
- win10九月十五更新补丁导致共享打印机无法连接
- 微信开放平台 第三方平台开发
- VCS仿真学习(5)Debugging with DVE
- 编写一个方法,将一段文本中的各个单词的字母顺序翻转题
- 用手机如何把PDF转成PPT文件