USACO 奶牛博覽會 DP

2022-03-07 07:19:25 字數 1479 閱讀 7270

奶牛想證明他們是聰明而風趣的。為此,貝西籌備了乙個奶牛博覽會,她已經對n頭奶牛進行了面試,確定了每頭奶牛的智商和情商。

貝西有權選擇讓哪些奶牛參加展覽。由於負的智商或情商會造成負面效果,所以貝西不希望出展奶牛的智商之和小於零,或情商之和小於零。滿足這兩個條件下,她希望出展奶牛的智商與情商之和越大越好,請幫助貝西求出這個最大值。

第一行:乙個整數n,表示奶牛的數量,1 ≤ n ≤ 100

第二行到第n + 1行:第i + 1行有兩個用空格分開的整數:si和fi,分別表示第i頭奶牛的智商和情商,−1000 ≤ si ≤ 1000,−1000 ≤ fi ≤ 1000

第一行:單個整數,表示情商與智商和的最大值。貝西可以不讓任何奶牛參加展覽,如果這樣應該輸出0

5-5 7

8 -6

6 -3

2 1-8 -5

(選擇 1,3,4 號奶牛,此時智商和為−5 + 6 + 2 = 3,情商和為7 − 3 + 1 = 5。加入 2 號奶牛可使總和提公升到10,不過由於情商和變成負的了,所以是不允許的)

這題很容易想到dp,乍一看有點像01揹包,每個牛都有選或者不選,但是仔細分析會發現這樣不行。

在轉移的過程中很難考慮智商以及情商大於0,簡單來說就是有後效性。

那麼又看到情商或智商絕對值小於1000,答案最大只能為200000,想到可以使dp[i]表示答案為i的方案是否存在,

但也很難判斷智商和情商大於0,所以不妨將答案拆開為2部分,即

dp[i]表示情商和達到i的最大智商為多少

這個地方很關鍵,理解了這道題就簡單了,

情商和為負數的情況也要考慮所以陣列下標要向右移一段距離即加上乙個常數,

情商最大和為100000,陣列就開200000(正負各100000)

然後發現變成了01揹包,不過要注意情商是恰好為i而不是不是最大為i,所以開始要把dp陣列初始化為負無窮,然後dp[0+m]=0(這裡m為乙個常數),普通的01揹包是初始化為0,原因這裡不展開

狀態轉移的時候,要對w[i]的正負分情況轉移,為正倒著做,為負正著做

最後答案就為max,0<=i<=m且dp[i+m]>0,i為情商dp[i+m]為智商

#include #include #include using namespace std;

int n, m, w[110], v[110], dp[200010];

int main()

memset(dp, -127 / 2, sizeof(dp));

dp[m] = 0;

m *= 2;

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

int ans = 0;

m /= 2;

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

if (dp[i + m] > 0) ans = max(ans, dp[i + m] + i);

printf("%d\n", ans);

return 0;

}

西安世界園藝博覽會

10月22日,世園會圓滿閉幕。在西安 的努力下,創造了園區內刑事治安零發案的奇蹟,遊客滿意度89.5 2010年8月,世園會園區安保組成立。治安局 交警支隊 辦公室 消防支隊等部門業務骨幹和市 局 武警 保安等單位負責人被紛紛抽調入組。2010年冬季開始至今,西安 先後開展了一系列專項整治行動,全市...

手機閱讀的博覽會表現

一 簡介 創意城市,設計未來,2009 中國杭州文化創意產業博覽會定於 2009年10 月16 19 日在杭州和平國際會展中心舉行。展會主會場分設 6大展館,分別是主題演繹館 品牌創新館 傳媒影視館 設計交流館 印文化博覽館和工美精品館。該博覽會中也吸引了 的通道們前來助勢,移動 電信 聯通 華數都...

手機閱讀的博覽會表現

一 簡介 創意城市,設計未來,2009 中國杭州文化創意產業博覽會定於 2009年10 月16 19 日在杭州和平國際會展中心舉行。展會主會場分設 6大展館,分別是主題演繹館 品牌創新館 傳媒影視館 設計交流館 印文化博覽館和工美精品館。該博覽會中也吸引了 的通道們前來助勢,移動 電信 聯通 華數都...