停更20天祭qwq(因為去準備推薦生考試了一直在自習qwq)
【noip2011選擇客棧】
這道題的前置知識是dp,可以參考=>【五一qb
xt】day3 動態規劃 鬼知道我寫的是什麼emm
這道題真的做了超級久了,大約從五六號的開始做吧,推薦生考試一直耽擱了qwq
鵝且——我wa了好多好多次qwq,也真是令人質壁分離了。
乙個o(n)的動態規劃的思路:
準備好多好多不同的陣列:
pre[i] 表示位置 i 之前 (包括位置 i) 最大的滿足最低消費的咖啡店位置
pos[j] 表示第 j 種顏色客棧目前出現的最大的位置
tot[j] 表示第 j 種顏色客棧目前出現的總個數
res[i] 表示位置 i 作為右端點能組成多少組配對
可能有點抽象,so:
現在已經知道一組並不毒瘤的良心資料:
5 2 3
0 5
1 3
0 2
1 4
1 5(其實就是洛谷的樣例)
辣麼:
這樣大概可能應該會好理解一點吧qwq。
前面的pos與tot都是記錄的當前值,因此很顯然我們要一邊處理一邊dp:
首先輸入一組color與money
判斷新輸入的這個客棧是否滿足最低消費的需要,如果滿足,pre[i]=i;否則顯然pre[i]的值與上乙個客棧的pre相同emm
注意:處理完pre後要接著去處理res,處理的順序應為:pre=>res=>tot&pos;
處理res:**移方程)
把選擇每種顏色的客棧都列舉一下:
判斷當前客棧與前乙個顏色相同的客棧之間是否有滿足最低消費的另一客棧,如果沒有,前乙個顏色相同的客棧的組合數就等於當前客棧的組合數。
舉個例子:
如果有,那麼對於i之前的每乙個與之顏色相同的客棧都可以與i配對組成一種方案,即pre[i]=tot[c]
這樣轉移方程就有了:
然後對於每個方案都+起來,就是最後的ans;
#include#includeend-#include
#include
const
int maxn = 200010
;const
int maxk = 100
;using
namespace
std;
intn,k,p,c,m,ans,maxl;
intpre[maxn],pos[maxn],tot[maxn],res[maxn];
intmain()
pos[c] =i;
tot[c]++;
ans +=res[i];
}cout
}
忙碌的五一
這個五一過的特別的忙碌,整天7天沒有在家休息,唯一能陪兒子的時間就是晚上回去和早上走之前 兒子現在大了,也懂事了許多,不再任由自己的性子胡鬧了,給他說的話和道理能聽進去一些,但還是有些調皮,經常說些沒有教過他的話,有自己很多的創意和發揮 乙個月沒見兒子了,這次回來發現除了在家曬黑了,身體方面沒什麼太...
五一假期感受
從4月30好號的下午,我們學校就開始放五一假,這假一放他可了不敵,他一放就是10天呀,10天呀差不多半個月,同學們都準備回家,我也同樣準備回家,可是家裡不同意讓我回家,所以,我只好留在學校,第二天學校的人走的差不多了,以前擁擠的食堂現在變的好冷清。我見到揹包回家的人,我也有一絲按捺不住也想回家,但是...
鬱悶的五一
昨天突然接到乙個不幸的訊息,臨時要改個程式,五一不能歇了,我暈!恐怕連家都不能回了!昨晚上陪客戶喝酒,喝了4兩白的,一瓶花雕,結果回家後竟吐得一塌糊塗,然後倒在床上不醒人事。早上醒來,只覺得自已渾身酒氣,外地出差的同事打來 說程式有些問題,只好馬上去公司。感覺肚子好餓,但是路上竟然沒有看到賣早餐的,...