Java笔试编程题01

牛妹从第一天开始每天吃掉剩余蛋糕的三分之一加一个,直到第n天剩一个。题目要求求出第一天有多少蛋糕。通过动态规划解决,初始化dp[n-1]=1,根据dp[i]=3*(dp[i+1]+1)/2更新,当n<1时返回0。
摘要由CSDN通过智能技术生成

Java笔试编程题01


题意:

众所周知,牛妹非常喜欢吃蛋糕。
第一天牛妹吃掉蛋糕总数三分之一(向下取整)多一个,第二天又将剩下的蛋糕吃掉三分之一(向下取整)多一个,以后每天吃掉前一天剩下的三分之一(向下取整)多一个,到第n天准备吃的时候只剩下一个蛋糕。
牛妹想知道第一天开始吃的时候蛋糕一共有多少呢?

示例:

输入:
n=2
输出:
蛋糕=3
输入:
n=4
输出:
蛋糕=10

二、思路

一、思路
用一个数组dp表示当前这天没吃蛋糕之前的蛋糕数目,那么dp的最后一个值,dp[n-1]一定是初始化为1,dp[i]由dp[i+1]推导而来:
因为:
dp[i+1] = dp[i] * (2/3) - 1
所以:
dp[i] = 3*(dp[i+1] + 1)/2

二、图示

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值