给定a,b和n,其中一美元是每天获得的钱,b是要购买的食物的成本,n是天数。
每天“a”钱都存入您的帐户,您希望购买尽可能多的食物,并尽可能多地购买每单位食物费用b。 如果你已经有食物,那么你那天不会购买食物。你重复这个任务n天,并想计算在n天结束时留下的金额。
蛮力解决方案是模拟任务,但这不会起作用,因为天数非常高,如10 ** 9。
我想要的其他方法
我很难找到一个<湾
以下是一个例子
a = 5,b = 3,n = 3
第1天:5美元,我们最多可以购买1份2美元的食物
第2天:2天(上一天)+5美元我们最多可以购买2个食品1美元 遗体
第3天:1(上一天)+5美元,我们已经不会进行任何购买了 有1种食物(从上一天开始)
第3天结束时剩余6美元
答案 0 :(得分:1)
我可能会误会,但每次购买的天数会呈指数增长。如果您下次获得x食物的资金,那么您将获得x*(a/b)
,下次您将获得x*(a/b)*(a/b)
等等。
因此,如果你利用指数增长,你应该能够强制它。
如果今天你有0食物和x钱,那么你可以购买x / b食物,所以你可以跳x / b天(当你再次食用0食物)时你会有(x%b)+(x / b)*下次付钱。由于您遵循指数增长,您的复杂性将为O(logN)。如果不清楚需要a=2, b=1
并且看到你很快就能获得大量资金,而且你可以轻松地跳过很多天。
有一点需要注意的是指数可能很慢。如果a和b非常接近(a=1000000 b=999999
),那么a / b将非常接近1.仍然是logN但是你在慢时段花费了太多时间。在实践中,这意味着您将进行大量迭代,只需要跳过一两天。您还可以通过记录每个周期赚多少钱(在我必须购买食物的两天之间,在我的例子中它将是1)并计算需要多少周期才能购买1个单位的食物来减少这个短缺(你需要提醒一下周期后剩下的东西,把它加到你现在拥有的钱中,并除以食物的成本)。一旦你知道这一点,你可以跳过所有的周期,直到你可以买到更多的食物。