HDU 5000 Clone 猜想性質 DP

2021-06-25 16:00:03 字數 900 閱讀 6771

題意:複製人有n個屬性,給出每個屬性的最大值,屬性值的範圍從0到最大值。如果a的所有能力值比b低,那a不能存活。問,最多可以有多少人存活。

思路:看了離散的偏序,重新寫一下吧。

首先,a的能力值比b高,這個就定義了乙個偏序關係。 而能夠共存的人,就是對應了一條反鏈(即,相互之間不能比大小)。

根據dilworth定理,最大反鏈的大小等於最小的鏈的個數,使這些連覆蓋所有的點。

我們就要找到整個圖中最大的寬度。

這個有點類似於擲幾個篩子,求這些色子點的和的最大概率,整個方案分布類似有二項分布或正太分布,那麼方案數的最大值是在中位數中取到。

我們能有dp方程求出前i個屬性,和為j的方案數。那麼最後的答案就是dp[n][sum/2];

**如下:

#include #include #include using namespace std;

const int max = 3000;

const int mod = 1e9 + 7;

int t,n;

int sum;

int dp[max][max];

int t[max];

int main(void)

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

dp[0][0] = 1;

for(int i = 0 ; i < n; ++i)

for(int j = 0; j <=sum; ++j)

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

dp[i+1][j+k] = (dp[i+1][j+k] + dp[i][j]) % mod;

printf("%d\n",dp[n][sum / 2]);

}return 0;

}

HDU 5000 Clone (多重揹包)

題目 題意 有乙個人他可以轉殖自己,但轉殖出來的自己並不完全一樣。對於每兩個自己,a和b,他會看n個屬性,如果b的每一項屬性都比不過a,那麼b就不能存在。每乙個屬性的評分範圍為0 t i 問最多能存在多少個他自己。思路 對於可以同時存在的兩個人,假如有3個屬性 a1 b1 c1 a2 b2 c2 如...

hdu 5000 共存問題 揹包

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

列舉 hdu1172 猜數字

因為時間給的非常多,然後測試組數又很小,所以是乙個很粗暴的模擬 只要從1000到9999列舉答案,然後再判斷符合答案的個數,看個數的數量差不多就做完了 然後就在於如何判斷有幾個數字同時存在,我的思路是用vis1和vis2分別記錄進行比較的兩個數字中,每個數字出現的次數 那麼如果對於某個數字,vis1...