题目

题目

E
是一个很裸的概率dp 概率dp板子是绿
然后做概率dp 都需要推下式子 就是高中数学那种E(x)=p1*f(1)+p2*f(2)这种,然后这个题目 其实看到数据
需要开long long ,然后这种正推的去找答案用记忆化搜索是
很好做的,初始化答案肯定是0,记忆化搜索保存答案最常见的
就是用map来剪枝了
刚好map开1e18可以,然后我们来考虑推公式
首先对于f(n)
第一种情况就是无脑使用 支付x 变成[N/A]这种 这是显而易见的
第二种情况就是抛骰子,等概率出现1-6 P=1/6;
那么我们可以发现
f(n)=y+f(n/1)*1/6+f(n/2)*1/6++f(n/3)*1/6+f(n/4)*1/6++f(n/5)*1/6+f(n/6)*1/6
其中y就是代价,这个看着就跟高中写概率题一样,然后尝试化简
因为除以1就是自己本身 于是左移过去即可 1-1/6=5/6
可以得到5/6f(n)=y+f(n/2)*1/6++f(n/3)*1/6+f(n/4)*1/6++f(n/5)*1/6+f(n/6)*1/6
考虑移过去5/6 得到f(n)=1.2y+1/5(f(2)+f(3)+f(4)+f(5)+f(6))
// f(n) = min(f(n/A) + X, (f(n/1)+f(n/2)+...+f(n/6))/6 + Y)
// f(n) = min(f(n/A) + X, (f(n/2)+..+f(n/6) + 6*Y) / 5)
知道转移方程,然后就能写代码了 对于任何一种情况
我们对于 两种操作得到的值取min 就可以最优了
然后就没有然后了
美丽的分割线
来到F题 个人认为比E麻烦多了
然后我找了篇简洁明了的代码拿来给你,我稍微修改了一些,(当然我也不会和你说什么平衡树,stack这些的),首先你可以自己模拟下
1:(XY) ---> yx
2: ((XY)) ---->XY
3;(XY(XXY)) ------>XXYyx
其实像这种字符串翻转的题目 都有个特性就是状态的奇偶了 比如
P10058 Reverse and Rotate
对于类似1这种我们发现是需要给他翻转的 因为他的括号是奇数个
对于2这种 其实直接记录就行,因为你会发现偶数个翻来翻去还是一样
然后3这种就是这两个的组合 ,对于XXY是需要最终让他顺序提前的 只是他在操作过程种不需要改变串内顺序
知道这个我们就可以开始写代码了,初始让状态为偶数,
假设奇数需要翻转 偶数直接读入
然后注意事项 就是好好读题 我是不会告诉你
我题目没读仔细,以为
Let T=Sl+1..Sr-1,我当时想这么简单吗?于是样例也没仔细想
然后 就没有然后了 半个小时多才反应过来
string的vector里面字符串是一块一块的 比如说
xtt y 2 下标分别对应 0 1 2 而不是 x是0 t是1 t是2这种
代码整体思路就是这样的
下面给出样例
((XYZ)n(X(y)Z))的模拟过程
首先
f(0)开始
读入第一个字符( 进入 f(1)
f(1)进来
读入第二个字符( 进入f(2)
f(2) 进来
此时会发现state%2==0的 那么偶数就直接存入res
最终读到Z 此时res=XYZ 后面碰到“)”返回到f(1)中,f(2)结束
f(1)
由于state%2==1,那么我会把他放进vector里面,等待后面弄完然后翻转顺序,然后接着读入n 由于状态是奇数 那么我会把它转大小写,此时n转为N,并且放进vector里面,此时vector里面是XYZ N ,接着读入“(”进入f(2)
f(2)进入
此时由于state=2%2=0,然后直接把X放进res里面,然后又读到了“(”接着进入f(3)
f(3)进入
由于state=3%2=1,我们读入y会首先转为大写,然后放进v里面,然后接着读入“)”
break了,然后来到了最后的一个for循环 进行翻转 这边就一个字母就无所谓顺序了
f(3)结束了 回到f(2)
f(2)进入
f(2)接收来自f(3)的Y,由于state是偶数 那么会直接放入res里面了 此时F(2)的res为 XY 接着读入Z res=XYZ 然后读到“)”break,由于vector没东西 也不需要翻转 偶数就是不用管vector的 于是返回res=xyz f(2)结束 进入f(1)
f(1)进入
前面讲过f(1)的vector里面是 XYZ N 现在又接收了f(2)的XYZ 于是vector变成了
XYZ N XYZ 然后后面读入了“)”break 彻底结束
然后来到最后一个for循环改变顺序 栈顶的先存进来 栈尾的就是放res最后了,于是一头一尾就这样交换了顺序。然后回到起始的f(0)开始统计答案 ,(这边res用空格隔开了 方便阅读)
f(0)回来
f(0)是偶数 所以直接使用res接受答案 于是res就是XYZNXYZ v的size 就是空的
于是返回res 来到主函数
Main函数
输出res即可 答案为XYZNXYZ