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...