POJ 2376 Cleaning Shifts
題意: 給定若幹子區間,以及目標區間,用最少的子區間覆蓋目標區間。若無法實現,輸出-1;
思路:
因為每取一個,花費都是1,所以可以使用貪心。(否則要用DP)子區間按照左端點由小到大排序,記錄已被覆蓋區間,每次找到左端點在[1~r+1]中的右端點的最大值,用有這個最大值的子區間參與覆蓋。ans++;
若中途斷檔,或者循環n之後沒有覆蓋完[1~r],則輸出-1;
證明:
輸出-1的做法易證。至於可以成立的情況,那麽必然每個格子都要染色,從左邊開始,若[1~r]已經被染色,因為已排序,所以之後的區間左端點遞增,若左端點>r+1,則此時必須要用一個區間染色了。所以必然要盡可能往右裏染色。
代碼:POJ 2376 Cleaning Shifts
POJ 2376 Cleaning Shifts
相關推薦
POJ 2376 Cleaning Shifts(貪心)
des always == col contain print eight ide weight Description Farmer John is assigning some of his N (1 <= N <= 25,000) cows
POJ - 2376 Cleaning Shifts 貪心(最小區間覆蓋)
red his 時間 sin lines farmer cte number limit Cleaning Shifts Farmer John is assigning some of his N (1 <= N <= 25,000) cows to do
POJ 2376 Cleaning Shifts
最大 記錄 開始 lean 覆蓋 排序 區間覆蓋 實現 都是 題意: 給定若幹子區間,以及目標區間,用最少的子區間覆蓋目標區間。若無法實現,輸出-1; 思路: 因為每取一個,花費都是1,所以可以使用貪心。(否則要用DP)子區間按照左端點由小到大排序,記錄已被覆蓋區間,每次找
POJ 2376 Cleaning Shifts (線段樹優化DP)
題目大意:給你很多條線段,開頭結尾是$[l,r]$,讓你覆蓋整個區間$[1,T]$,求最少的線段數 題目傳送門 線段樹優化$DP$裸題.. 先去掉所有能被其他線段包含的線段,這種線段一定不在最優解裡 排序,讓所有線段構成左右端點位置都遞增的排列 定義$f[i]$表示第$i$條線段,覆蓋到第$i$條線
POJ 2376 Cleaning Shifts 貪心
題意:有一些奶牛,每隻奶牛負責一個時間段。問覆蓋完全部的時間段最少需要多少隻奶牛。若不能全部覆蓋,輸出-1. 思路:類似於區間覆蓋的問題,明知道用貪心求解,但是還是wa了好幾次。首先這道題有一個需要注意的就是每次不需要從上一隻的結束點開始,可以從上一隻結束的下一個點開始。
貪心問題 區間覆蓋 —— POJ 2376 Cleaning Shift
ron turn else gpo .org works con oid n) 題目:http://poj.org/problem?id=2376 題意:就是 N 個區間, 輸入 N 個區間的 [begin, end],求能用它們覆蓋區間[1,T]的最小組合。 題解:
Cleaning Shifts-POJ-2376
原題: Farmer John is assigning some of his N (1 <= N <= 25,000) cows to do some cleaning chores around the barn. He always want
洛谷P4644 [USACO2005 Dec]Cleaning Shifts 清理牛棚 [DP,數據結構優化]
mes false bar lac 過程 -o ive imp space 題目傳送門 清理牛棚 題目描述 Farmer John‘s cows, pampered since birth, have reached new heights of fastidio
POJ 2376
sort i++ std vector tac clu %d stack algorithm 1 #include <iostream> 2 #include <cstdio> 3 #include <cmath> 4
poj2376 Cleaning Shifts【線段樹】【DP】
scan 區間 cin can pri sign interval divide poj2376 Cleaning Shifts Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 32561
POJ - 2376 貪心-區間問題
題目容易陷入的誤區: 題目表面上是儘可能少的去覆蓋區間,其實是儘可能的去覆蓋點,這點容易導致大家WA 思路: 按照結束時間倒敘排列,從末端開始向前儘可能向前去包含更多的點 注意: WA多半是你想成了包含區間段而不是點(去試一試下面的樣例1,
Cleaning Shifts[線段樹+DP]
傳送門 區間覆蓋問題 , f[x]表示覆蓋L--x的最少代價 線段樹維護區間最小 //未ac但對拍過的程式碼 #include<cstdio> #include<algorithm> #define N 10050 #define M 100050
【POJ3171】Cleaning Shifts 帶權區間最小覆蓋
題目大意:給定一個長度為 N 的序列,求帶權區間最小覆蓋。 題解:設 \(dp[i]\) 表示從左端點到 i 的最小權值是多少,則狀態轉移為:\(dp[e[i].ed]=min\{dp[j],j\in[e[i].st-1,e[i].ed-1] \}\),初始化 \(dp[st-1]=0\) 即可。因此,這裡
【題解】poj3171 Cleaning Shifts 線段樹優化DP
題目連結 Description Farmer John’s cows, pampered since birth, have reached new heights of fastidiousness. They now require their barn
區間覆蓋問題 例題 POJ 2376
題意:給出N個區間[Li,Ri],選最少數量的區間使得給定區間[l,r]被覆蓋。 分析: 貪心經典例題。 將區間按左端點(相同則按右端點)排序,直接用pair就可以。 curR表示當前已經覆蓋到的區間
poj 2376 最小區間覆蓋問題
Description Farmer John is assigning some of his N (1 <= N <= 25,000) cows to do some cleaning chores around the barn. He always
POJ 2376 淺談一類區間覆蓋問題的貪心解法
世界真的很大 曾經有過那麼一段時間,我是研究過這個問題的 今天在做一道其他題的時候,這個問題作為一個子問題出現了,然後,然後,然後我蒙了你知道吧? 基本上搞忘了,模模糊糊有一點有點印象 趕緊
poj 2376(區間覆蓋)
題目大意:有若干頭牛,每一頭牛都有自己的工作時間段(稱為小區間),現有一個給定的總工作時間段(稱為大區間),要求用最小的小區間數來覆蓋大區間並輸出區間數 分析:該問題的原型就是區間覆蓋問題,首先要對輸入的資料進行排序,排序的標準是:每個區間的開始時間升序,然後開始處理資料
【Luogu P4644】Cleaning Shifts
set line shift clu 做了 arrow scan 樹狀 代碼 題目 給定 \(n\) 個區間 \([a_i, b_i]\), 花費為 \(c_i\), 求覆蓋 \([L, R]\) 區間的所有整數的最小花費. \(0\le n \le 10^4, 0\le
poj 2376解題報告(詳細) 帶幾組測試資料
farmer John要安排他的牛清理牛棚,一共有T個牛棚要清理,每頭牛可以清理相鄰的牛棚。比如,一頭牛可以清理4-7號牛棚。當然了,牛清理的牛棚可以重疊。現在要你求出可以完成牛棚的清理的最少頭牛的個數,不可以就輸出-1. 一道區間重疊問題。排序+貪心可解