公司發了某商店的購物券1000元,限定只能購買店中的m種商品。每種商品的**分別為m1,m2,…,要求程式列出所有的正好能消費完該購物券的不同購物方法。
程式輸入:
第一行是乙個整數m,代表可購買的商品的種類數。
接下來是m個整數,每個1行,分別代表這m種商品的單價(0第一行是乙個整數,表示共有多少種方案
第二行開始,每種方案佔1行,表示對每種商品購買的數量,中間用空格分隔。
例如:輸入:
2200
300則應輸出:
22 2
5 0
輸入:2
500800
則應輸出:
12 0
輸入:1
999則應輸出:
0多個方案間的順序不重要。
解這道題目受到21位花朵數的啟發,可以給每件商品設定乙個數量標誌num,**prize,先輸入**,並從所有商品中找到最便宜的那個min,然後max=1000/min,這個max就是每個商品購買的最大數量,接下來我們對每個商品購買的數量進行列舉,通過遞迴實現,當列舉到第m+1位的時候,遞迴停止,算一下此時所購買的商品的**,如果等於1000,就把計數器count加1,並把num陣列中的資料全部儲存下來,當遞迴全部結束,就可以輸出count的值以及儲存的num值,這個**還有需要優化的地方,比如在列舉的時候,肯定有很多冗餘的資料,但是藍橋杯的資料一般不會很**,而且雖然加入的判斷條件可以去除一些無用的資料,但判斷條件本身也需要花費時間,這中間的把持就要靠實際情況來驗證了。
#includeusing namespace std;
int count=0;
int q[1000];
int p=0;
void cal(int *num,int m,int *prize)
{ int i,sum=0;
for(i=0;i>m;
for(i=0;i>prize[i];
if(prize[i]
藍橋杯 2011 購物券(dfs)
公司發了某商店的購物券 1000 元,限定只能購買店中的 m種商品。每種商品的 分別為 m1,m2,要求程式列出所有的正好能消費完該購物券的不同購物方法。程式輸入 第一行是乙個整數 m,代表可購買的商品的種類數。接下來是 m個整數,每個 1行,分別代表這 m種商品的單價。程式輸出 第一行是乙個整數,...
雜湊 購物券(bday)
小y得到了兩張價值不菲的shop購物券,所以他決定去買n件禮物送給朋友們。小y選好了n件禮物,並且它們的 之和恰好為兩張購物券的面值之和。當小y被自己的聰明所折服,高興地去結賬時,他突然發現shop對購物券的使用有非常奸詐的規定 一次只允許使用一張 不找零 不與現金混用。小y身上根本沒有現金,並且他...
(七)購物券設計
id int unsigned auto increment comment 主鍵 deno decimal 10,2 unsigned not null comment 面值 condition decimal 10,2 unsigned not null comment 訂單滿多少錢可以使用 s...