題目:codevs1513、bzoj1863。
題目大意:有n個人圍成乙個圈,每個人需要$a[i]$個顏色不同的勳章,且相鄰兩個人不能拿到同樣顏色的勳章。求至少需要準備多少種不同顏色的勳章。
解題思路:首先我們可以二分答案,但如何判斷答案的正確性呢?我們可以用dp。
設$f[i]$表示第i個人在不與前乙個人衝突的情況下,與第1個人最多衝突的個數,$g[i]$表示第i個人在不與前乙個人衝突的情況下,與第乙個人最少衝突的個數,可得
$f[i]=min(a[i],a[1]-g[i-1])$
$g[i]=max(0,a[i]+a[i-1]+a[1]-f[i-1]-x)(x為當前二分到的答案)$
最後如果g[n]不為0則答案有效。
c++ code:
#include#includeusing namespace std;int n,a[20005],f[20005],g[20005];
bool ok(int x)
return !g[n];
}int main()else
l=mid+1;
} printf("%d\n",ans);
return 0;
}
ZJOI2006 皇帝的煩惱
嘟嘟嘟 首先瞎想可以知道,一定選相鄰兩個數之和最大的。這樣後面的將軍選和前面的前面的一樣的勳章就行了。不過如果 n 是奇數的話就會gg。然後考慮每乙個勳章最多有 frac 個人用,所以 lceil frac rceil 個勳章一定夠。然後兩者取max。只考慮第一種情況能對一半點 滑稽 include...
ZJOI2006 皇帝的煩惱 二分 DP
傳送門 初看題目,感覺就是道水題,判一下奇偶性就行 考完了才知道,浙江的題嘿嘿 結果最後模擬賽只拿了20。題解 二分答案,check的時候dp,設ma x i m ax i 為第i個人最多和第1個人勳章相同的個數,mi n i m in i 為第i個人最少和第1個人勳章相同的個數 於是就有 判一下m...
ZJOI2006 物流運輸
description 物流公司要把一批貨物從碼頭a運到碼頭b。由於貨物量比較大,需要n天才能運完。貨物運輸過程中一般要轉停好幾個碼頭。物流公司通常會設計一條固定的運輸路線,以便對整個運輸過程實施嚴格的管理和跟蹤。由於各種因素的存在,有的時候某個碼頭會無法裝卸貨物。這時候就必須修改運輸路線,讓貨物能...