18 8 23 考試總結

2022-05-20 01:56:02 字數 4750 閱讀 4371

今天的考試我是真的...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 1e7

using

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.其實邪狼王的貪婪也很...