Shopping商店購物

2021-08-05 18:30:11 字數 1696 閱讀 7449

問題 m: 【動態規劃】商店購物

時間限制: 1 sec 記憶體限制: 64 mb

題目描述

魔法商店中每種商品都有乙個**。例如,一朵花的**是2 元,乙個花瓶的**是5 元。為了吸引更多的顧客,商店提供了特殊***。

特殊優惠商品是把一種或幾種商品分成一組。並降價銷售。例如:3朵花的**不是6元而是5 元;2個花瓶加1朵花是10 元不是12元。

編乙個程式,計算某個顧客所購商品應付的費用。要充分利用***以使顧客付款最小。請注意,你不能變更顧客所購商品的種類及數量,即使增加某些商品會使付款總數減小也不允許你作出任何變更。假定各種商品**用***如上所述,並且某顧客購買物品為3朵花和2個花瓶。那麼顧客應付款為14 元。因為1朵花加2個花瓶的***為10元;2朵花的正常價為4元。

輸入 輸入包括一些商店提供的優惠資訊,接著是購物清單。

第一行為優惠商品的種類數(0≤ s ≤ 99)。

第二行到第s+1 行,每一行都用幾個整數來表示一種優惠方式。第乙個整數 n (1 ≤ n ≤ 5),表示這種優惠方式由 n 種商品組成。後面 n 對整數 c 和 k 表示 k (1≤ k ≤5)個編號為 c (1≤ c ≤ 999)的商品共同構成這種優惠,最後的整數 p 表示這種優惠的***(1≤ p ≤ 9999)。***總是比原價低。

第 s+2 行,這一行有乙個整數 b (0≤ b ≤5),表示需要購買 b 種不同的商品。

第 s+3 行…第 s+b+2 行,這 b 行中的每一行包括三個整數:c ,k和 p 。c 表示唯一的商品編號(1 ≤ c ≤ 999),k 表示需要購買的 c 商品的數量(1≤k ≤5)。p 表示 c 商品的原價(1 ≤ p≤ 999)。最多購買 5×5=25 個商品。

輸出 只有一行,輸出乙個整數:購買這些商品的最低**。

樣例輸入

2 1 7 3 5

2 7 1 8 2 10

2 7 3 2

8 2 5

樣例輸出

思路:完全揹包+狀壓

#include 

#define ll long long

#define pb push_back

#define mp make_pair

#define pii pair

using namespace std;

struct youh y[110];

int n,s,ans,c[6],k[6],p[6],f[8000];

int findit(int cc)

int fun(int a,int b)

returns;}

int main()

scanf("%d",&n);

int v=0,s=0;

for (int i=0;i"%d

%d%d",&c[i],&k[i],&p[i]);

v+=k[i]*p[i];

s+=(int)pow(6,i)*k[i];

}for (int i=1;i<=s;++i)

y[i].w=ss-y[i].p;

y[i].sum=sum;

}memset(f,0,sizeof f);

for (int i=1;i<=s;++i)

for (int v=0;v<7776;++v)

printf("%d\n",v-f[s]);

}return

0;}

86 商店購物

86 商店購物 問題描述 在商店中,每一種商品都有乙個 用整數表示 例如,一朵花的 是 2 zorkmids z 而乙個花瓶的 是 5z 為了吸引更多的顧客,商店舉行了 活動。活動把乙個或多個商品組合起來降價銷售,例如 三朵花的 是 5z 而不是 6z,兩個花瓶和一朵花的 是 10z 而不是 12z...

python練習小專案 小商店購物結算

編號 購買個數 名稱 dict1 money int input 請輸入您的充值金額 set1 set while true print dict1 x input 請輸入您購買的商品編號 或者輸入0結束購物 if x in 0 1 2 3 4 5 and x.isdigit 購買的商品編號 if ...

Shopping(樹形揹包 點分治)

我們發現要解決乙個樹上的連通塊問題,解決這種問題的時候我們不妨先隨便選乙個根,如果要選某兩個點則他們到n的路徑上的點都會被選就變成了乙個樹形揹包問題。注意這裡是多重揹包,所以我們可以用單調佇列優化,時間複雜度 o n 2m 考慮暴力選根的時候會把很多重複的情況算進去,所以我們可以用點分治,只計算根的...