POJ 1149 (0 1揹包變形)

2021-08-04 05:52:08 字數 1057 閱讀 4038

題意:

有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個位最公路的終點。已知每戶家庭都會向著遠離公...