題意:你有一篇n個自然段組成的文章,希望將它們排列成1,2,…,n。可以用ctrl+x(剪下)和ctrl+v(貼上)快捷鍵來完成任務。每次可以剪下一段連續的自然段,貼上時按照順序貼上。注意,剪貼簿只有乙個,所以不能連續剪下兩次,只能剪下和貼上交替。例如,為了將變為公升序,可以剪下1將其放到2前,然後剪下3將其放到4前。再如,排列,只需一次剪下和一次貼上即可——將放在後,或者將放在前。
使用演算法:在本題中我們主要使用以下幾個演算法
1)迭代加深搜
2)啟發式演算法
迭代加深搜:
啟發式演算法:
啟發式演算法就是估計,估計你的答案所在位置,下面是乙個二叉樹可以幫助理解。
大家看假如我們要找9號節點,我們用迭代加深搜,就會搜(1,2,3)->(1,2,3,4,5,6,7)->(1,2,3,4,5,6,7,8,9)才能搜到9,假如我們直接用深搜就只用搜(1,2,4,8,9)。面對這樣的情況,直接深搜當然更好,可萬一我們每一層的寬度都非常大怎麼辦。答案就是用啟發式演算法來解決迭代加深搜的這個弊端。我們設定乙個函式,使得他能估計答案大概在不在這層中。假如我們要找12這個節點,我們就設計乙個函式來判斷12在不在本層中,假如我們的迭代只有1次,樹只有一層,我們就用啟發式函式來估計答案是否在這層中,不在,我們就不遞迴了,直接跳過。再給大家提一下,其實每次我們迭代時,我們都可以理解為每次迭代都相當於生成一顆樹,只是他們之間的層數不同,這提醒大家,我們每次把層數加一時,dfs都會重新從頭開始搜。那好,既然我們每次都可以把它們理解為不同的樹,那為什麼之前我還要說啟發式函式是用來判斷答案是否在這層的呢?因為我個人認為這可以更好的理解為什麼迭代加深搜與啟發式演算法配合能做到bfs的作用。bfs是一層一層搜,而啟發式函式也是一層一層的判斷。再給大家舉個例子,假如我們要的答案是22,可5號節點和8號節點的值都為22,啟發式函式可以幫助我們跳過迭代層數為1和2時要搜的數,確定答案不在1和2層中。使得他直接從迭代層數為3時搜,而這時的dfs就會應為迭代層數的限制無法搜到8號節點,搜到的是5號節點,因此可以確定迭代加深搜與啟發式演算法配合可以,高效的做到求最短路徑。
#include #include #include using namespace std;
const int n = 9;
int n,a[n];
bool ans_sort()
return true;
}// the number of integers with incorrect successor
int h()
} }return false;
}int solve()
} return max_ans;
}int main()
return 0;
}
11 21 學習計畫
第一天寫部落格,竟然有一種,以後會每天都在這裡寫計畫的衝動。雖然吧,是實驗室發起的,但是既然都一起做了,我想連我平時的課程也做個計畫。整天早上起了床就拿著課本去教室,這已經做了大半個學期了,我還沒數過自己學了幾門課。哎,那就先看看都有哪些課吧,也好做個計畫複習複習了 復變 數電數電實驗 軟體技術基礎...
11 21學習心得
第三部分 第八章員工的培訓與開發 新員工入職引導的目的及其過程 新員工入職引導的目的是主要向新員工提供著手工作所需要的一些資訊 比如公司計算機的密碼以及各項規章制度等 更為理想的新員工入職引導還應當能夠幫助員工與公司建立情感上的聯絡。例如,團隊合作,個人責任,創新,誠實,多元化,客戶服務以及互相尊重...
11 21工作總結
工作 五蓮農用車裝配,安旭餐廳,加工北車間食堂佈線,門衛設計佈線。學習印表機 hp1136 安裝準備 首先對印表機進行操作,把不是乙個顏色的包裝保護之類的東西全拆了,安裝出紙的小板子,電源插座,與電腦相連的線。檢查無誤後開機。列印準備 先在電腦中找到裝置及印表機,看是否可以直接列印,不行的話需要在網...