洛谷p1019
dfs搜尋順序:
搜尋現在節點所有可以到達的點,然後再遞迴搜尋這乙個點。
邊界:1.每個單詞只能用兩次
2.前後兩個單詞一定是否能拼在一起
這道題中如何判斷兩個單詞是否能接到一起是難點,需要注意應用substr()函式,另外,基於貪心,如果要是接龍後的單詞最長,那麼重疊部分就要最短。(詳見下面**)
#include
#include
using
namespace std;
int n;
const
int max=
110;
string input[max]
;char start;
int ans=0;
int g[max]
[max]
;int used[max]
;//用過幾次
void
dfs(
int last,string dragon)
used[last]--;
}int
main()
}for
(int i=
0;i(input[i][0
]==start)
dfs(i,input[i]);
cout
}
洛谷p1135 奇怪的電梯
dfs搜尋順序:
從起點(也就是第一層)開始搜尋,對於每個正在搜尋的點遞迴的搜尋,向下移動和向上移動兩種方案。
剪枝:最優化剪枝:如果當前執行的方案數已經大於答案的方案數,那麼當前情況一定不合法。
#include
using
namespace std;
int n,a,b;
const
int max=
210;
int k[max]
;int ans=max;
bool vt[max]
;void
dfs(
int now,
int cnt)
vt[now]
=true;if
(now+k[now]
<=n&&
!vt[now+k[now]])
dfs(now+k[now]
,cnt+1)
;if(now-k[now]
>0&&
!vt[now-k[now]])
dfs(now-k[now]
,cnt+1)
; vt[now]
=false;}
intmain()
else
printf
("%d\n"
,ans)
;return0;
}
洛谷p1294高手去散步
dfs搜尋順序:
列舉所有點作為起點,呼叫遞迴函式,遞迴地搜尋所有與其相連的點中合法(在這種方案下沒有被選擇過)的點.
搜尋優化:
用鄰接表來存邊
w[idx]
=c; e[idx]
=b; ne[idx]
=h[a]
; h[a]
=idx++
;
獻上**
#include
#include
#include
#include
using
namespace std;
int n,m;
const
int max=
210;
int h[max]
,e[max]
,ne[max]
,w[max]
,idx;
int ans;
bool vt[max]
;void
add(
int a,
int b,
int c)
void
dfs(
int now,
int dist)
int c=w[i]
;dfs
(b,dist+c);}
vt[now]
=false;}
intmain()
for(
int i=
1;i<=n;i++
)dfs
(i,0);
printf
("%d"
,ans)
;return0;
}
訓練日記 20161024
初賽好像不會掛了,好開心!版權原因,不上傳題目。題意 求1 n n 1000 的排列中逆序對恰好為 k 個的排列數目。多測。題解 f i j 表示前 i 個數,逆序對個數恰好為 j的排列個數,易得轉移方程f i j i 1k 0f i 1 j k 用字首和優化可使複雜度降為o n2 題意 對於乙個長...
訓練日記 20170324
長久不更新部落格了。期間經歷了恰好被ag線踩的wc,經歷了漫長痛苦的小高考準備。現在終於可以重整旗鼓,向省選進發!幾個月來,唯一不變的是我仍然是個超級蒟蒻 版權原因,不上傳題目。題意 最小樹形圖 去年就接觸 聽說 過的演算法,一直沒有真正寫過。因為各種奇怪的細節錯誤,調了好幾個小時 比如找環時沒有判...
訓練日記 20170328
今天的題目似乎很水 好多人都提前ak離場了,於是提前一小時收題。但是我還是各種不會。思維江化?話說,聽到一句很有趣的話 山不在高,有林則徐 水不在深,有江 題意 給定一棵有n n 105 個節點的有根樹,編號互不重複。詢問有多少棵子樹內節點編號構成乙個連續區間。題解 水題,對於每個節點 i 記錄以該...