藍橋杯 購物券消費方案 遞迴暴力 解題報告

2021-06-29 00:51:36 字數 967 閱讀 4417

公司發了某商店的購物券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...