搜索,打表,構造

常見的可以通過搜索,打表,構造進行的做法

1.我們經常會做一種 dp,也即是\sum_{i=1}^{n}x_i=m,詢問dp[x_1][x_2]..[x_n]的方法數。

其中對於給定x_1..x_2..x_n排序後,相同結果的dp值相同的情況下,我們可以考慮dfs.

原因就在於雖然總的情況很多,但是通過有效的分類,我們需要計算的東西並不多。

Gym 101174H

 

2.定義f(d,n)=n爲good number,其中d表示1-9的數字,n表示1-n中的每一個數字,f(d,n)表示1-n中各個數上數字爲d的個數和。

HDU - 6659

當看到這個題目的時候很容易想到用dp來做。但仔細一想,就可能感覺到問題的關鍵在於,該函數值f(d,n)=n||f(d,n)>=n||f(d,n)<=n都是有可能的。因此常見的動態規劃等無法卡出相等這個條件。這個時候遇到這種很模糊的定義的時候,我們常見的方法就是打個表看一下規律,我們就發現了對於給定的d,該數是非常稀疏的,並且f(d,n)隨着n的增長是一個單調增長的函數,因此我們可以知道大膽利用增長這種性質,配合搜索快速的去尋找到想要的值。並且如果表打大一點,我們可以知道當數大於了某個界限後不再存在這樣的值。

故該題的 做法可以先快速剪枝搜索出結果,並二分查找,或者直接對於給定值下降搜索。

 

3.給定圖上n*m的點,每次只能走型如(0,2)(1,1)(2,2)(1,2)等步長嚴格大於1小於3的點,則爲了走遍全部點,有什麼走法。

HDU - 6660

同樣對於這一類構造題,我們思考一下(或者暴力打個表)可以發現除了1*1在2*2 或者1*n 或者 n*1的形狀下都沒有走法,其他情況都可以走。因此,如何構造走法成爲了關鍵的一環。

這種走格點的主要方法還是將平面上的點進行分類,自習思考一下就容易想到考慮(1,1)可以將圖上點分成兩類

故我們現在的主要目的就是將上面的紅色和藍色尋找到一種方法給連接起來,也即是圖右黑色的連接線,仔細將最上方兩行留出來,想辦法連接即可,只要將圖分成上面兩類,就很容易出結果了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章