CF399B Red and Blue Balls 题解
分析
本题暴力解法会 TLE,所以我们需要进一步分析。
定义状态 表示把前 个球全部变为红色的步数,那么如果第 个球是蓝色的话,我们需要做如下操作:
-
把前 个球弹出;
-
把第 个球变成红色;
-
把第 个球前面填上蓝色球。
显然,既然取到了第 个球,那这个球前面的一定都是红球,需要 次转换,那么转移方程如下:
最后,统计:
就是最终的答案。其中 表示第 个球的颜色。
代码实现
#include <bits/stdc++.h> using namespace std; long long a[55]; int n; char s[55]; int main(){ cin>>n>>s+1; a[1]=1; for(int i=2;i<=n;i++){ for(int j=1;j<i;j++)a[i]+=a[j]; a[i]++; } long long ans=0; for(int i=1;i<=n;i++)if(s[i]=='B')ans+=a[i]; cout<<ans; //system("pause"); }
本文作者:tmjyh09
本文链接:https://www.cnblogs.com/tmjyh09/p/15897847.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步