1. 程式人生 > 其它 >P1164 小A點菜題解

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++程式碼