P1164 小A點菜題解
阿新 • • 發佈:2021-07-18
思路分析:
以中間某個通過狀態為樣本進行分析,比如我們現在面對第\(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++程式碼