HDU 5000 Clone (多重揹包)

2021-07-05 07:14:43 字數 872 閱讀 6512

題目:

題意:有乙個人他可以轉殖自己, 但轉殖出來的自己並不完全一樣。對於每兩個自己,a和b,他會看n個屬性,如果b的每一項屬性都比不過a,那麼b就不能存在。

每乙個屬性的評分範圍為0-t [ i ],問最多能存在多少個他自己。

思路:對於可以同時存在的兩個人,假如有3個屬性

a1 + b1 + c1 = a2 + b2 + c2

如果 a1 > a2 則 b1 < b2 和 c1 < c2 必滿足一項,

即 只要各個屬性之和相同且a有乙個屬性大於b,則b一定有乙個大於a

問題轉化為,在每個屬性中各取乙個值使和為一定值的最大方案數,易得和應取sum=(t1 + t2 + ... + tn)/ 2 (貪心)

在每個屬性中各取乙個值使和等於sum的方案數,每個屬性看成一種物品,取得值代表取這種物品多少個,每個物品價值為1

**:

#include #include #include #include #define mod 1000000007

#define inf 0x7fffffff

using namespace std;

typedef long long ll;

int t[2005], dp[2005][2005];

int main()

memset(dp, 0, sizeof(dp));

for(int i = 0; i <= t[0]; i++)

dp[0][i] = 1;

sum /= 2;

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

printf("%d\n", dp[n - 1][sum]);

}return 0;

}

HDU 5000 Clone 猜想性質 DP

題意 複製人有n個屬性,給出每個屬性的最大值,屬性值的範圍從0到最大值。如果a的所有能力值比b低,那a不能存活。問,最多可以有多少人存活。思路 看了離散的偏序,重新寫一下吧。首先,a的能力值比b高,這個就定義了乙個偏序關係。而能夠共存的人,就是對應了一條反鏈 即,相互之間不能比大小 根據dilwor...

hdu 5000 共存問題 揹包

每只羊有n個屬性 下面n個數字表示每個屬性的值範圍為 0,t i 對於羊圈裡的a羊和b羊,若a羊的每個屬性都 b羊,則a羊會殺死b羊。問羊圈裡最多存活多少隻羊。sum相同的羊不會互相殺死。sum不同的羊不會重合。我們設a羊sum x,b羊sum y,若a,b羊能共存,但不會把ab同時放到羊圈裡。因為...

HDU 1059 多重揹包

個人覺得,這個可以作為多重揹包的模板使用,其中包括了簡單的0 1揹包和完全揹包,分清楚它們三個的區別。include include define n 60005 define max a,b a b?a b int c n void complete int cost,int weight,int...