题目描述
众所周知,牛妹非常喜欢吃蛋糕。
第一天牛妹吃掉蛋糕总数三分之一(向下取整)多一个,第二天又将剩下的蛋糕吃掉三分之一(向下取整)多一个,以后每天吃掉前一天剩下的三分之一(向下取整)多一个,到第n天准备吃的时候只剩下一个蛋糕。
牛妹想知道第一天开始吃的时候蛋糕一共有多少呢?
题解:
题目问的是第一天吃的什么,给的是吃的天数
如果是正着推:
dp[i]表示第i天还没吃蛋糕前,蛋糕的数量
dp[i+1]=dp[i]*(2/3)-1
dp[i]=(dp[i*3]+1)*2/3
模拟上面这个递推式即可
代码:
class Solution {
public:
/** * * @param n int整型 只剩下一只蛋糕的时候是在第n天发生的. * @return int整型 */
int cakeNumber(int n) {
// write code here
int sum=1;
for(int i=n-1;i;i--)
{
sum=3*(sum+1)/2;
}
return sum;
}
};