今天的考試我是真的...emmmm
考試的時候我亂搞 然後狗了三十分...
一些大佬用狀壓dp弄得 然後還有另外一些大佬是貪心列舉所有情況 正解是非常簡短的
這道題可以總結出乙個規律 當m ≤ 5的時候 可以推出如果兩行的數&起來是 0 那麼就一定合法
證明: 因為m ≤ 5 又因為做過的題目小於等於沒做過的 所以說0的個數一定大於等於1的個數
那麼0最多的一行肯定至少有ceil(m / 2)個0 否則0就不夠多
那麼該行就有至多兩個1 如果剩下的方案中沒有一種方案在那兩個1對應的兩列全為0
那麼該列0的個數就永遠不可能大於等於1 就不合法
因為如果只有一列為0 另一列是1 那麼那兩列1的個數永遠大於0的個數 就不可能合法
所以只需要找到兩個&起來為0的就可以了 只有乙個1的同理
這道題就是一道貪心...然後細節有點多
我們考慮把所有客人分為兩組 a ≥ b的分為第一組 a < b 的分為第二組
然後再對兩組分別排序 如果是第一組 則按照a - b的大小從大到小排序
另外一組則是b - a的大小從大到小排序
對於第一組而言 a - b的大小越大 那麼也就是說如果讓這個客人去吃第二組的餅餅 他虧得高興度就會更多
所以我們想要讓虧掉的高興度最少 那麼就優先滿足a - b大的 第二組同理
那麼現在問題就是如何分配餅餅 因為總餅數是一定的
所以我可能是第一組全部吃到喜歡的餅餅第二組的餅餅不夠吃 然後第二組的人最後那幾個就去吃第一組的餅餅
要不就是第一組的不夠吃 最後幾個人去吃第二組的 所以就亂搞搞判斷就可以了
這道題可以說是真夠鵝星了...嘔
是一道線段樹優化dp的問題 dp方程是顯而易見的
dp[ i ][ j ]表示我選擇i個冰淇淋 用了j個桶桶所能獲得的最大收益
那麼轉移是和檸檬那道題 詩人小g很像的 dp[ i ][ j ] = dp[ k ][ j - 1 ] + c[ k + 1 ][ i ]
c[ k + 1 ][ i ]表示k + 1到 i 這一段的貢獻 也就是有是多少種不同的冰淇淋
樸素的轉移是列舉 i j k 然後暴力跑出來 k + 1 到 i 的貢獻 但是這複雜度就是o(m * n2)
非常不優秀 然後我們可以發現dp只和上一層j - 1有關 就可以滾一滾
然後發現dp[ i ][ j ]是在1 ~ i - 1裡面去乙個max 所以考慮用線段樹維護區間最大值
但是由於在dp的時候隨著i的變化 c也是隨著變化的 所以還要考慮怎麼維護c
對於位置i 他比i - 1多了a[ i ]這一種顏色 但是a[ i ]只會在和他一樣的冰淇淋上一次出現的位置 + 1 ~ i產生貢獻
所以每次就只用在他上一次出現的位置 + 1 ~ i加上1就可以了 然後查詢區間max
(這份**線段樹維護的是dp[ k ][ j ] + c[ k + 1 ][ i ]) 所以每次修改是從prev[i] 開始改到i - 1 我當時理解了好久...
**
#include #define oo 1e7using
namespace
std;
const
int n = 2 * 1e5 + 5
;int n,m,tag[4 * n],f[4 * n],dp[n][2
],a[n];
intprev[n],las[n],now;
void push_down(int
o) }
void update(int
o) void modify(int o,int l,int r,int l,int r,int
del)
push_down(o);
int mid = (l + r) >> 1
;
if(l <= mid) modify(2 *o,l,mid,l,r,del);
if(mid < r) modify(2 * o + 1,mid + 1
,r,l,r,del);
update(o);
}int query(int o,int l,int r,int l,int
r) push_down(o);
int mid = (l + r) >> 1
;
int ans = 0
;
if(l <= mid) ans = max(ans,query(2 *o,l,mid,l,r));
if(mid < r) ans = max(ans,query(2 * o + 1,mid + 1
,r,l,r));
return
ans;
}void build(int o,int l,int
r)
int mid = (l + r) >> 1
; build(
2 *o,l,mid);
build(
2 * o + 1,mid + 1
,r);
update(o);
}int
main( )
now = 0
;
for(int i = 1;i <= n;i ++) dp[i][now] = dp[i - 1][now] + (prev[i] == 0
);
for(int j = 2;j <= m;j ++) }}
printf("%d
",dp[n][now]);
}
考試總結 CQOI2017 考試總結
再奮鬥一年,爭取ak noip2016 cqoi2017 這是去年我立的flag。看考場,電腦挺快,而且配置和評測機一樣,可以放心的在自己的電腦上卡常測試啦,好評。碼了一道fft的題,沒網只好拷著回家交,鍵盤蜜汁小,enter佔據了兩行,旁邊還有關機按鈕。座位安排奧妙重重,和巴蜀dyf大神坐在一起。...
MBA考試總結
終於考完了 mba入學統考,兩年來參加了兩次,感覺還是挺辛苦和有壓力的。第一年沒有通過是因為之前了解太遲,大概準備了 20天左右,最後還是功成垂敗。09年其實也一直沒有心情複習的,逼到最後的 20天,狠了一把勁,還是狠狠的複習了幾天,貌似今年應該可以通過了。總結經驗如下 1 如果你決定去做一件事,請...
2016 7 14考試總結。
今天的考試,總的來說不難,但是考得很差,簡直 從中暴露出對知識的掌握不牢固,練習不夠等問題。1.求 方程x1 2x2 nxn m的所有非負整數解 x1,x2,xn 的個數。這個題目在加上取餘運算後就是乙個貨幣系統的問題。也就是揹包。難以接受自己連這是個揹包問題都沒看出來。3 2.其實邪狼王的貪婪也很...