20160609常規賽總結

2021-07-13 08:02:22 字數 2002 閱讀 7305

kao這場比賽也是醉了。

下午剛騎完環城晚上醉醺醺的。

敲完以後覺得感覺很好,就估分估了240

被小c嚴重鄙視說不可能

然後第一題爆0了==

現在說一下題目。

t1

模擬題,因為兩句話寫反了導致全部都t了。

t2

一道裸的字首和優化dp

算了還是寫的詳細點吧==

sourcescodeforces 645 e

description

給出長度為m的字串以及k個小寫字母,求再任意加上n個字元(在k的範圍內)總串不同子串行的個數的最大值。

注意:空串也計 入統計。

solution

定義dp[i]表示以str[i]為結尾的與之前的不同子串行的個數

那麼轉移的時候只要轉移到之前相同處即可。

然後ans=∑n

+mi=

1 dp[i]

為了讓ans最大我們最好最大化dp[i]

然後轉移的時候dp[i]=∑i

−1i=

last

[str

[i]]

dp[i]

最大化的dp[i]也可以同時最大化後面的dp值。

關於後面的n個字母,由於轉移方程一定,我們希望讓last[str[i]]盡量小就好了。

作為全場唯一個a掉的現在想來還有點小激動。。

雖然它是字首和優化dp的**。

t3

sourcescodeforces 152e(有改編)

description

給定乙個n*m的矩陣,以及k個座標,求包含k個座標的的四聯通塊的點的權值的最小值。

solution

這題給了很多的水分點。最小最簡單的那個掛了==

現在一萬個不爽。。整整少了10分==

表程是所謂狀壓dp

這個dp是用填表(坑)法來實現的。

首先我們令dp[i][j][s]表示點(i,j)覆蓋狀態為s的最小點權和。

它可以向四周填坑。

可以自己填自己,當然這要有個前提就是剛好自己裡有乙個狀態覆蓋和當前沒有交集。

這樣的狀態好像很亂。

瞎逼跑個最短路就好了。。

放個源**

#include

#include

#include

#include

#include

using

namespace

std;

const

int m=105;

const

int ss=1

<<8;

const

int inf=1

<<30;

int dp[m][m][ss],a[m][m],n,m,k,mx,my,ans;

bool mark[m][m][ss];

struct nodec[m];

struct status

};int rx=;

int ry=;

priority_queueque;

inline

void min(int &a,int b)

inline

bool check(const

int &x,const

int &y)

inline

void bfs());

for(int i=1;i<=n;++i)

for(int j=1;j<=m;++j)

que.push((status));

for(;!que.empty();)

int main()

20160602常規賽總結

task1蠻有趣 task2暴力dp 聽老師講了什麼字首和愣是沒想通暴力的dp為什麼要字首和。如果有字首和我的dp就是o n 了。task3有一些問題 比如為什麼關於開關問題同乙個區間不會反轉兩次,雖然理由很有道理,但是我理解不通。智商不夠。那麼以後只好記結論了 最後一題放一下題目講一下思路。圖染色...

2016 10 5常規賽總結

哈哈忍不住先自嘲一下 不過其實今天做的還是很不錯的,比前幾次花式倒數強多了。特別是第三題的樹鏈剖分200行能夠寫出來還是感覺很棒的。雖然ak大犇直接暴力修改就過了 第一題有乙個地方,細節做得不是很好,只有90分,當然如果想法比較好的話就不會有這些問題了,也會比較短。第二題沒什麼問題,直接dp稍微優化...

小公尺 OJ 程式設計比賽 02 月常規賽

carryon 最近迷上了數數字,然後 starry 給了他乙個區間 l,r 然後提了幾個要求,需要將 ll 到 rr 之間的數全部轉化成 16 進製,然後連起來。將連起來的數又轉化成 10 進製。將最終結果對 15 取模。資料範圍 1 l r 1000000000000 單組輸入 l和 r的值 輸...