2023年藍橋個人賽賽前總複習 個人經驗總結

2021-07-10 13:14:49 字數 2603 閱讀 7683

20號就是藍橋杯的省賽了,準備了半年,現在進入了最後的準備階段,把幾大經典演算法和一些c++ 上必備的技巧做乙個總結。

第一,dijkstra。為什麼從dijkstra說起,因為這是最經典,最基礎,使用率最廣的圖演算法之一。

void dijkstra()

shortestdist=0;

shortestpoint=1;

shortest[1]=0;

ifvisited[1]=true;

already=1;

while(already<=v);

line l[linenumber+1];

int leng[v+1];

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

leng[1]=0;

for(int i=1;i<=v-1;i++)

} }

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

} return;

}

注意事項:bellman-ford是遍歷邊,遍歷的迴圈次數是v-1次,v是點的數量,不是邊的數量。

如果是無向圖,則遍歷邊的時候,一條邊遍歷兩次,相當於兩條邊,只是起點和重點的次序顛倒了。

**如下:

void flyod()

}} }

return;

}

沒有太多的注意事項。

第四:最小生成樹 prim演算法。

最簡單的最小生成樹演算法。

**如下:

void prim()

ifvisited[1]=true;

minpoint=1;

minlength=0;

for(int i=1;i<=v-1;i++);

int cmp(const void *a,const void *b)

int find(int a)

bool join(int a,int b)

else

return true;

}void kruskal()

} return;

}

第六:最小點覆蓋,最大匹配數,匈牙利演算法。

又一大比賽中常常出現的演算法。最小點覆蓋=最大匹配數。匈牙利演算法基本**如下:

bool ifvisited[y+1];

int ancestor[y+1];

bool dfs(int a)

} }return false;

}void xiongyali()

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

if(dfs(i)==true)

} return;

}

另外,兩大公式:

最大匹配數=最小點覆蓋;

最小路徑覆蓋=拆點前點數量-最大匹配數/2;

第七:0-1揹包,最短兩段子序列的動態規劃。

拿0-1揹包和子串行來說事,是因為這兩個問題是動態規劃的啟蒙問題,具有非常高的代表性。

首先說一下0-1揹包問題,典型解法:

for(int i=0;i<=itemnumber;i++)

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

}

初始化dp[0][n];然後從i開始遍歷。

兩段最短子串行問題,這個問題涉及三個陣列,分別為前i個字元包括i組成的最大連續序列長度,後i個字元包括i組成的最大連續序列長度,前i個字元可以組成的最大序列,不包括i:

dp[0]=0;

a[100];

b[100];

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

a[0]=0;

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

else

}b[n]=0;

for(int i=n-1;i>=0;i--)

result=-inf;

for(int i=0;iresult)

}return result;

第八:最大流演算法,ek

最大流是用ek做,當然也可以km,ek比較直觀,好上手,在比賽中比較合適。

int flow[v];

int former[v];

bool ifvisited[v];

bool bfs()

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

former[1]=1;

flow[1]=inf;

ifvisited[1]=true;

push(1);

while(!q.empty())

} }if(flow[v]==0)

else

}int ek()

result+=flow[v];

bfs();

min=flow[v];

} return result;

}

九,排序演算法

直接插入排序,希爾排序,堆排序,氣泡排序,快速排序,歸併排序

藍橋杯第四屆個人賽

小明正看著 203879 這個數字發呆。原來,203879 203879 41566646641 這有什麼神奇呢?仔細觀察,203879 是個6位數,並且它的每個數字上的數字都是不同的,並且它平方後的所有數字上都不出現組成它自身的數字。具有這樣特點的6位數還有乙個,請你找出它!再歸納一下篩選要求 1...

2023年04月25日個人賽

a romaji 題意 本題比較簡單,給你乙個字串,要你判斷字串中的每乙個子音字元後面是否有乙個母音字元。題解 簡單簽到題,模擬即可。include include include define ll long long using namespace std intmain else if f 1...

2023年04月19日個人賽

題意 這個題意就是給你乙個錯誤的排序方式,要求你在它的這個排序方式下判斷是否存在正確的執行結果。若存在正確的結果,則輸出 1,否則輸出乙個例子說明是錯誤的。題目的輸入是元素的個數n。題解 這一題比較有意思,很容易判斷出只有當n 1 or n 2時執行結果是正確的,其餘的情況都是錯誤的。這樣我們就構造...