1. 程式人生 > >【Codeforces 1132C】Painting the Fence

【Codeforces 1132C】Painting the Fence

def 覆蓋 前綴 連續 前綴和 每一個 順序 第一個 輸出

Codeforces 1132 C

題意:給一些區間\([l_i,r_i]\),從中刪掉兩個,求剩下的區間最多能夠覆蓋的格子數量。

思路:首先枚舉第一個刪掉的區間,然後我們可以通過差分來求出每個格子被多少個區間覆蓋了,隨後求出所有格子中被\(1\)個區間覆蓋的數量的前綴和,再枚舉第二個刪掉的區間,找刪掉的\(1\)個區間覆蓋的最少的即為答案。

Codeforces 1132 C 分析

tataky:

首先我們將所有的互不包含的區間們放在\(v\)裏,然後看被包含的區間有多少,如果超過2個就直接輸出答案,否則需要通過\(dp\)來求:

首先我們考慮\(dp\)的狀態。那麽首先我們需要記錄刪掉了多少個區間\((0..2)\)

,還要看現在已經到了第幾個按順序排列的區間,並且如果刪除的是連續的兩個區間,還要存前一個沒被刪掉的區間在當前的區間前面多少個。

所以\(dp(i,j,k)\)表示現在到了第\(i\)個區間,然後已經幹掉了\(j\)個區間,現在連續地刪掉了\(k\)個區間,最多可以覆蓋的格子個數。

考慮轉移。我們考慮第\(i\)個區間是否被刪掉,如果刪掉,那麽轉移到\(dp(i+1,j+1,k+1)\),否則轉移到\(dp(i+1,j,0)\)

V--gLaSsH0ldEr593--V、neal、kmjp:

和我的思路差不多,是首先用差分求每一個格子被多少個區間覆蓋了,然後考慮枚舉第一個刪除的區間,看將它刪去之後所覆蓋只被一個區間覆蓋的格子數量最少的區間,這就是第二個區間。只需要處理一下被一個區間覆蓋的格子數量的前綴和就可以了。

【Codeforces 1132C】Painting the Fence