穿梭时间的画面的钟 从反方向 开始移动|

tmjyh09

园龄:3年2个月粉丝:1关注:3

CF399B Red and Blue Balls 题解

题目传送门

分析

本题暴力解法会 TLE,所以我们需要进一步分析。

定义状态 ai 表示把前 i 个球全部变为红色的步数,那么如果第 i 个球是蓝色的话,我们需要做如下操作:

  1. 把前 i1 个球弹出;

  2. 把第 i 个球变成红色;

  3. 把第 i 个球前面填上蓝色球。

显然,既然取到了第 i 个球,那这个球前面的一定都是红球,需要 ai1 次转换,那么转移方程如下:

ai={1,i=1,j=1i1aj+1,i2.

最后,统计:

i=1,si=Bnai

就是最终的答案。其中 si 表示第 i 个球的颜色。

代码实现

#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 中国大陆许可协议进行许可。

posted @   tmjyh09  阅读(39)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起