这是腾讯官方微博出题,半小时写出程序可当初级程序员:
某一游戏中有一把武器有1到9个等级,每次升级成功的概率为30%,失败的概率为70%,成功升1级,失败降1级,降到一级不能再降,升到9级不能再升,问1000次内升到9级的概率。
这个题目我大概在半个小时的时候写出了数学的函数表达式,因为读懂题目就花了很久。,但是经过仔细思考我已经有了思路,这是一道典型的动态规划的题目。问题的解要综合考虑子问题的解,最开始就是要例举递推公式:
我认为题目出的不严谨,问的是1000次内升到9级的概率,而我之前理解成打完1000次之后,是9级的概率。其实不论怎么理解,最后的动态规划公式都只需要作小小的改动,但是这告诉了我们读懂题目的重要性。题目的意思就是打到第i次,升到9级就OK了,至于之后的,到底是继续降阿,还是保持9级不动,就不归我们管了,只要升到9级就OK了。所以我希望题目加一句话,就是升到9级后游戏结束!!!这就多好理解阿,另外,因为是1000次以内,所以要累积这所有的1000次,每次升到9级的概率,当然, 玩了7次后,游戏最多升到了8级,所以至少需要8次,才能升到9级。
首先我要假设一进入游戏就是1级,打了一次游戏之后,0.7的概率还是一级,0.3的概率是玩家升到了2级。
令f(n,m)表示第n次玩游戏结束时,级数为m的概率,则
f(1,1)=0.7; f(1,2)=0.3; f(1,3)=0;....;f(1,9)=0;