每只羊有n個屬性
下面n個數字表示每個屬性的值範圍為[ 0, t[i] ]
對於羊圈裡的a羊和b羊,若a羊的每個屬性都》=b羊,則a羊會殺死b羊。
問羊圈裡最多存活多少隻羊。
sum相同的羊不會互相殺死。
sum不同的羊不會重合。(
我們設a羊sum = x,b羊sum = y,若a,b羊能共存,但不會把ab同時放到羊圈裡。
因為一定存在乙隻羊c ,sum = x,且c和b不能共存,既然不能共存,則我們放入c羊是不會影響答案的。)
sum其實是對稱的,和組合數一樣。所以dp[n][求和(t[i]) / 2] 是最大的。
要推出最大值的時候,每個人的屬性和必然相同,並且這個和必然是所有和 / 2,這樣的話,問題轉化為給n個數字,要組合成sum / 2有多少種方法,就用dp揹包推一遍就可以得解了。
#include #include #include #include #include #include #include #include#include #include using namespace std;
#define rd(x) scanf("%d",&x)
#define rd2(x,y) scanf("%d%d",&x,&y)
#define clr0(x) memset(x,0,sizeof(x))
typedef long long ll;
const int modo = 1e9 + 7;
int s[2004];
int dp[2004][1004];
int main()
sum /= 2;
clr0(dp);
for(int i = 0;i <= s[0];++i)
dp[0][i] = 1;
for(int i = 1;i < n;++i)
}cout<
HDU 5000 Clone (多重揹包)
題目 題意 有乙個人他可以轉殖自己,但轉殖出來的自己並不完全一樣。對於每兩個自己,a和b,他會看n個屬性,如果b的每一項屬性都比不過a,那麼b就不能存在。每乙個屬性的評分範圍為0 t i 問最多能存在多少個他自己。思路 對於可以同時存在的兩個人,假如有3個屬性 a1 b1 c1 a2 b2 c2 如...
飯卡 HDU(揹包問題)
原題目 電子科大本部食堂的飯卡有一種很詭異的設計,即在購買之前判斷餘額。如果購買乙個商品之前,卡上的剩餘金額大於或等於5元,就一定可以購買成功 即使購買後卡上餘額為負 否則無法購買 即使金額足夠 所以大家都希望盡量使卡上的餘額最少。某天,食堂中有n種菜 每種菜可購買一次。已知每種菜的 以及卡上的餘額...
HDU 1059 揹包問題
揹包問題 題意 輸入 個整數,分別表示 到 六個數字的個數,問能否組合成兩組,這兩組所有數字的總和相同 include include include include include include include includeusing namespace std const int maxn ...