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