問題 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 考慮暴力選根的時候會把很多重複的情況算進去,所以我們可以用點分治,只計算根的...