P1164 小A点菜题解
作者:互联网
思路分析:
以中间某个通过状态为样本进行分析,比如我们现在面对第\(i\)种菜,设\(f[i]\)是前\(i\)种菜的所有点菜方法,但仔细一想,这样不行,为什么呢?因为只考虑了菜,没考虑钱
!不考虑钱的点菜是没有灵魂的~
所以前\(i\)种菜的点菜方法,是受钱数制约的,就是,还有另一个钱数的维度。所以,我们设\(f[i][j]\)给在前\(i\)种菜,在钱数上限\(j\)之内的点菜方法数。
注意:
本题是二维的,与前一题P2437 蜜蜂路线不一样,那个简单,是一维的。
\(f[i][j]\)是由哪些状态转移而来呢?我们可以想像,我们面对第\(i\)个菜,有三种情况:
一、剩余的钱数正好等于\(i\)号菜价格
1、选择购买。
2、不选择就是原来的。\(f[i][j]=f[i-1][j]\)
二、剩余的钱数大于购买\(i\)号菜价格
1、选择购买
2、不选择就是原来的。\(f[i][j]=f[i-1][j]\)
三、剩余的钱数小于购买第\(i\)号菜价格
1、没的选,只能是\(f[i][j]=f[i-1][j]\)
C++代码
标签:剩余,钱数,题解,选择,P1164,购买,种菜,点菜 来源: https://www.cnblogs.com/littlehb/p/15026093.html