code forces 399B Red&Blue Balls
2014-03-03 21:31
375 查看
code forces Red&Blue Balls 题目链接:http://codeforces.com/problemset/problem/399/B我特别想说这像是个记忆化搜索DP,可是看它的难度,也就是个水题打表……
题目大意:有两种球(蓝色Blue和红色Red),一个栈<球>,定义一组操作如下,
(1)while(栈顶的球是红色)pop();
(2)把栈顶的蓝球换成红的;
(3)push(蓝球)至n个;
求这样的操作循环几次后栈内的球全变成红的了。
题目分析:模拟T.L.E,那就找找规律。先来分析一下过程,整个过程大概就是从上到下,把蓝球一个一个变红,过程中可能会遇到把蓝球变红时付出把其上的红球变蓝的代价,所以我断定,递归会和模拟一样T.L E。既然上面的红球还会变蓝,那就说明可能会遇到走过的状态,可以用记忆化搜索的思想来把每个状态的B变成R所需的步骤记下来,甚至可以直接打出表来,输入查找即可。状态转移方程:dp[i]=(求和)dp[j](j=0,1,2,……i-1)+1。我找到的规律其实还不够彻底,其实把表输出来一看是个二进制数……
code:
题目大意:有两种球(蓝色Blue和红色Red),一个栈<球>,定义一组操作如下,
(1)while(栈顶的球是红色)pop();
(2)把栈顶的蓝球换成红的;
(3)push(蓝球)至n个;
求这样的操作循环几次后栈内的球全变成红的了。
题目分析:模拟T.L.E,那就找找规律。先来分析一下过程,整个过程大概就是从上到下,把蓝球一个一个变红,过程中可能会遇到把蓝球变红时付出把其上的红球变蓝的代价,所以我断定,递归会和模拟一样T.L E。既然上面的红球还会变蓝,那就说明可能会遇到走过的状态,可以用记忆化搜索的思想来把每个状态的B变成R所需的步骤记下来,甚至可以直接打出表来,输入查找即可。状态转移方程:dp[i]=(求和)dp[j](j=0,1,2,……i-1)+1。我找到的规律其实还不够彻底,其实把表输出来一看是个二进制数……
code:
#include<iostream> #include<string> using namespace std; string s; __int64 a[55]={1}; int main() { __int64 i,j,n,cnt=0; cin>>n>>s; for(i=1;i<=50;i++) { a[i]=1; for(j=0;j<i;j++) { a[i]+=a[j]; } } for(i=0;i<s.size();i++) { if(s[i]=='B')cnt+=a[i]; } cout<<cnt<<endl; return 0; }PS:虽然还是很水,但毕竟是凭一己之力出的……
相关文章推荐
- 1920. Divide The Stones
- hdu 1021
- HDU-4704 找规律
- HDOJ1079Calendar Game (找规律博弈)
- HDOJ1564Play a game(找规律博弈)
- HDOJ2897(巴什博弈变形-找规律)
- A hard puzzle hdu 1097 数论,规律,循环节
- Children's Day
- hdu 4722
- zoj 2105 (数学之,找规律结)
- hdu 4602(2013多校联赛第一场1003)
- HDU 4572 Bottles Arrangement找规律 简单题
- 中大 9095. Islands
- HDU 4148 Length of S(n)(找规律)
- hdu_1021 fibonacci again (找规律)
- hdu 1030 Delta-wave
- code forces 393B Three matrices
- HDU1719(找规律)
- hdu4602(快速幂)
- hdu3460(字典树)