題意:
有n種(最多5種)商品,每種商品三個屬性,自己的名字(數字),總量,價錢。現在商家正在進行打折活動,幾種商品組合的價錢會比原價低。有s種組合每種組合第乙個數字是有n種商品組合成一起,然後n對數字思路:代表商品的名字和數量,最後乙個數字表示這個組合的總價錢。
最後輸出,要買所有商品最少花多少錢?
每種商品都要買,這是0-1揹包問題,但是問題是怎麼把每種組合算在其中。解決的辦法是把每一種組合當做乙個商品,我們記錄每一種組合中的商品個數,我們如果選擇了這乙個商品,就會減去相應物品的個數與之比較。 dp
[a][
b][c
][d]
[e]
表示五種商品分別買的個數花費的最少錢數。
#include
#include
#include
using namespace std;
const int maxn = 100;
struct goods
g[6];
const int inf = 0x3f3f3f3f;
int n,s;
int dp[6][6][6][6][6];
int p[maxn][maxn*10+5]; //表示組合i,花費物品j的個數
int reduced[maxn];
int main()
scanf("%d",&s);
for(int i = 1;i <= s; i++)
scanf("%d",&reduced[i]);
}for(int a = 0;a <= g[1].cnt; a++) }}
}}
}printf("%d\n",dp[g[1].cnt][g[2].cnt][g[3].cnt][g[4].cnt][g[5].cnt]);
return
0;}
poj 2184 01揹包變形
題意 有k組數,si 和 fi,s和f的範圍是 1000,1000 現在要挑選其中的一些組,使所選的組 si的和 與 fi的和 的和 最大,並且 si 的和 不能小於0,fi 的和 也是。問 滿足條件的 最大的 si 的和 與 fi 的和 的 和。解析 01揹包的變形。首先將 si 看做每個物品的費...
POJ 1742 Coins 揹包dp變形
poj 1742 首先多重揹包有一種普通的二進位制優化,然後這題還可以加乙個判斷如果,a i c i m 的話,那就和完全揹包一樣,不用多重揹包。這樣應該能過。第二種做法,是參考了完全揹包,完全揹包可以用o nm 的複雜度完成,是因為,遍歷m的時候沒有數量的限制。那對於這題多重揹包,就要考慮在dp裡...
揹包變形 思路
居民集會 藍橋村的居民都生活在一條公路的邊上,公路的長度為l,每戶家庭的位置都用這戶家庭到公路的起點的距離來計算,第i戶家庭距起點的距離為di。每年,藍橋村都要舉行一次集會。今年,由於村里的人口太多,村委會決定要在4個地方舉行集會,其中3個位於公路中間,1個位最公路的終點。已知每戶家庭都會向著遠離公...