軟體基礎實踐 最少費用購物(動態規劃法)

2021-09-29 05:26:42 字數 1784 閱讀 2672

1.問題描述:

商店中每種商品都有標價。例如,一朵花的**是 2 元,乙個花瓶的**是 5 元。為了 吸引顧客,商店提供了一組優惠商品價。優惠商品是把一種或多種商品分成一組,並降價銷 售。例如,3 朵花的**不是 6 元而是 5 元,2 個花瓶加 1 朵花的***是 10 元。試設計一 演算法,計算出某一顧客所購商品應付的最少費用。

2.演算法設計:

對於給定欲購商品的**和數量,以及優惠商品價,計算所購商品應付的最少費用。

資料輸入:

提供欲購商品資料。第 1 行中有 1 個整數 b(0≤b≤5),表示所購商品種類數。接下來的 b 行,每行有 3 個數 c,k 和 p。c 表示商品的編碼(每種商品有唯一編碼),1≤c≤999。 k 表示購買該種商品總數,1≤k≤5。p是該種商品的正常單價(每件商品的**),1≤p≤999。請注意,一次最多購買 5x5=25 件商品。

提供優惠商品價資料。第 1 行中有 1 個整數 s(0≤s≤99),表示共有 s 種優惠商品組合。接下來的 s 行,每行的第 1 個數描述優惠商品組合中商品的種類數 j。接著是 j 個數字對(c,k),其中 c 是商品編碼,1≤c≤999。k 表示該種商品在此組合中的數量,1≤k≤5。每行最後 1 個數字 p(1≤p≤9999)表示此商品組合的***。

資料輸出:輸出計算出的所購商品應付的最少費用。

例:輸入: 2 2

7 3 2 1 7 3 5

8 2 5 2 7 1 8 2 10

輸出: 14

#include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

int sale[

1000][

6]=;

//分別表示每個優惠中每個商品數量

int saleprice[

1000]=

;//優惠的**

int salelength[

1000]=

;//優惠總共有幾個商品

int salenumber[

1000][

1000]=

;//優惠商品的id

int good[6]

[4]=

;//1 -> number 2 -> price 3 -> last num

int num[

1000];

//商品id

int dp[6]

[6][

6][6

][6]

;int n, m;

void

input()

cin >> m;

for(

int i =

1; i <= m; i++

) cin >> saleprice[i];}

}int

main()

dp[i]

[j][k]

[l][p]

= minx;

} cout << dp[good[1]

[3]]

[good[2]

[3]]

[good[3]

[3]]

[good[4]

[3]]

[good[5]

[3]]

<< endl;

return0;

}

演算法實踐 最少零錢問題

參考程式 include include include define max 20002 define inf 9999999 define min a,b a b b a int t 11 coins 11 n 硬幣面值陣列 t,可以使用的各種面值的硬幣個 數陣列 coins,n 種不同面值的硬...

軟體基礎實踐 刪數問題(貪心法)

1.問題描述 給定 n 位正整數 a,去掉其中任意 k n 個數字後,剩下的數字按原次序排列組成乙個 新的正整數。對於給定的 n 位正整數 a 和正整數 k,設計乙個演算法找出剩下數字組成的新數 最小的刪數方案。2.演算法設計 對於給定的正整數 a,計算刪去 k 個數字後得到的最小數。資料輸入 第 ...

最少攔截系統 基礎DP

kuangbin帶你飛 專題十二 基礎dp1 某國為了防禦敵國的飛彈襲擊,發展出一種飛彈攔截系統.但是這種飛彈攔截系統有乙個缺陷 雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能超過前一發的高度.某天,雷達捕捉到敵國的飛彈來襲.由於該系統還在試用階段,所以只有一套系統,因此有可能不能攔...