7 21集訓總結

2022-08-13 02:57:17 字數 1391 閱讀 7388

記\(f_\)為當前到第\(i\)層,將\([l,r]\)內方格吃完並且長度為\(t\)時最大得分。每次按照區間dp轉移即可。

更新的時候忘了與自己取max

寫成了f[i][l][r][t]=max(f[i][l-1][r][t], f[i][l][r+1][t]);

正確的寫法是f[i][l][r][t]=max(f[i][l][r][t], max(f[i][l-1][r][t], f[i][l][r+1][t]));

#include #include #define n 205

using std::min;

using std::max;

int n, m, mp[n][7], sp[n][7], f[n][7][7][n*50], sum=4, ans;

int main()

for(int len=4; len; --len) for(int l=1, r=len+l-1; r<=5; ++l, ++r) for(int t=0; t<=sum; ++t)

f[i][l][r][t]=max(f[i][l][r][t], max(f[i][l-1][r][t], f[i][l][r+1][t]));

} printf("%d\n", ans);

return 0;

}

由dilworth定理轉化為選盡量多條不相交的鏈。

很容易得到乙個貪心策略:自底向上在lca處能選就選

這個可以用樹狀陣列維護

按lca深度排序時下標寫錯了,寫成了1n,應該為1k

#include #include #define n 100005

int n, m, k, dep[n], f[n][19], q[3*n][3], sum[n], in[n], out[n], id[3*n], cnt, ans, rans[n];

int head[n], nxt[n<<1], to[n<<1], top;

inline int lowbit(int x)

inline void modify(int x, int v)

inline int query(int x)

inline void add(int x, int y)

void dfs(int u, int fa)

inline int lca(int a, int b)

bool cmp(int a, int b)

int main()

printf("%d\n", ans);

for(int i=1; i<=ans; ++i) printf("%d ", rans[i]);

return 0;

}

(7 6 7 20)集訓總結

電腦鍵盤莫名出鍋,打字真的不易,所幸之前已經寫了一篇 關於最近 7.6 7.20 集訓的乙個總結 個人認為集訓最有意義的是模擬賽吧,畢竟這麼多人一起。對於模擬賽略做分析?廢話較多 加粗的比較有價值?首先有幾次的模擬賽有些頹廢,後來想起來覺得挺惋惜的。有時候看一會覺得沒有什麼思路,就比較頹,覺得就這樣...

2019 7 22集訓總結

今天上午看了位運算的部分知識,複習了以前看過的遞迴,學習了快速冪,對書上的例題深入挖掘了一下,下午把 熟悉了好幾遍,看懂了位運算在快速冪中的應用。晚上打了比賽,讓我意識到自己和別人的差距,還有很長的路要走。堅持下去的才是勝利者,心態的問題,計畫的問題,都是我要不斷改進的問題。不管怎麼樣,放手去幹,下...

2019 8 1集訓總結

今天上午還是補了題目,又花了不少時間,雖然有很多收穫,但是一想到書上的知識還沒消化就發愁。趕緊看書,把時間最大化的利用起來。下午看了鍊錶,看了一會又去vjudge上做了幾道題目,感覺對技巧列舉和遞推公式有了更進一步的認識。利用已知條件結合簡單數學知識推導公式,這很重要,我雖然不是數學專業的,但是,多...