dfs問題小結 及基本問題解決

2021-10-05 08:40:33 字數 3803 閱讀 9601

dfs問題小結 及基本問題解決

根據現已做的題目 大多數的dfs題都可以用下面的模板解決

dfs

( 一系列的變化的量)

dfs(變化後的新變數)

//這裡回溯退出,就是在dfs退出之後的執行的操作

}

pat 1103 利用dfs解題 大意:題目給出正整數n、個數k和次數p,要求將正整數n分解為k個正整數p次方的和,並按照題目要求輸出。

題目**如下

#include

#include

#include

#include

using

namespace std;

int n,k,p,maxfacsum=-1

;vector <

int> fac,ans,temp;

intpower

(int x)

return ans;

}void

init()

}void

dfs(

int index,

int nowk,

int sum,

int facsum)

return;}

if(sum>n || nowk>k)

return

;//這種情況無答案 直接返回

if(index-

1>=0)

//fac[0]不用選擇

}int

main()

}system

("pause");

return0;

}

pat a1079

根節點為·**商 葉子結點為銷售商 過一層漲幅為r% 求他們的**之和

利用dfs解題 變化的量是depth 注意這裡的dfs要對酶乙個結點進行 所以用了for迴圈語句 for(int i=0;i#include

#include

#include

#include

using

namespace std;

const

int maxn=

100010

;struct nodenode[maxn]

;int n;

double p,r,ans=0;

void

dfs(

int index,

int depth)

for(

int i=

0;i.child.

size()

; i++)}

intmain()

else}}

dfs(0,

0);printf

("%.1f\n"

,p*ans)

;system

("pause");

return0;

}pat a 1090

題目同上 求的是**最高的葉子結點 以及最**格的葉子結點數量

**如下 注意體會遞迴出口條件之間的區別· pow函式的功能是實現冪次的計算

#include

#include

#include

#include

using

namespace std;

const

int maxn=

100010

;vector<

int> child[maxn]

;int n;

double p,r;

int num=

0,maxdepth=0;

void

dfs(

int index,

int depth)

else

if(depth == maxdepth)

return;}

for(

int i=

0;i.size()

;i++)}

intmain()

else

}dfs

(root,0)

;double ans=p*

pow(

1+r,maxdepth)

;printf

("%.2f %d\n"

,ans,num)

;system

("pause");

return0;

}

pat

啊1106

接下來求的是 最便宜的葉子結點 及其個數

**如下

#include

#include

#include

#include

using

namespace std;

const

int maxn=

100010

;const

int inf=

1e12

;//10的12次

vector <

int>node[maxn]

;int n,num=0;

double p,r,ans=inf;

void

dfs(

int index,

int depth)

return;}

for(

int i=

0;i.size()

;++i)

}int

main()

}}dfs(0,

0);printf

("%.4f %d\n"

,ans,num)

;system

("pause");

return0;

}

pat a 1053

輸出從根節點到葉子結點的路勁為s的所有路勁 如果有多條 按路勁非遞增輸出 注意多了乙個path來儲存路勁

**如下

#include

#include

#include

#include

using

namespace std;

const

int maxn =

110;

struct nodenode[maxn]

;bool

cmp(

int a,

int b)

int m,n,s;

int path[maxn]

;void

dfs(

int index,

int numnode ,

int sum)

//index 當前訪問節點 nodesum路徑中節點個數 sum就是路勁和

return;}

for(

int i=

0;i.child.

size()

;++i)

}int

main()

int id,k,child;

for(

int i=

0;i++i)

sort

(node[i]

.child.

begin()

, node[i]

.child.

end(

),cmp);}

path[0]

=0;dfs(0

,1,node[0]

.weight)

;system

("pause");

return0;

}

Git 基本命令指南及基本問題解決

假設此時發現情況不對,之前的那次版本號為 5c04 的提交是正確的,剛才的版本回退操作全都是誤操作,怎麼辦?再次執行一次版本回退嗎?當然不需要啦,我們有git reflog命令,它會記錄本地倉庫所有分支的每一次版本變化。實際上只要本地倉庫不被刪除,隨你怎麼折騰,都能回退到任何地方。reflog記錄只...

JasperReport 配置及問題解決!

jasperreport pdf中文 深入 去分析問題的原因,很快我就發現原來是jasperreports 在呼叫itext.jar 另外乙個開源專案 建立字型的時候出現了問題,查閱了 itext 的使用,原來它在使用亞洲字型的時候還有其他兩個包 itextasian.jar 和itextasian...

tomcat 安裝及問題解決

安裝 1 wegt 或 rz be 選擇apache tomcat 8.5.38.tar.gz 2 tar zxvf apache tomcat 8.5.38.tar.gz 3 mkdir usr local tomcat 4 mv apache tomcat 8.5.38 usr local to...