蒜頭君手上有一些小木棍,它們長短不一,蒜頭君想用這些木棍拼出乙個正方形,並且每根木棍都要用到。 例如,蒜頭君手上有長度為 11,22,33,33, 33 的 55 根木棍,他可以讓長度為11,22 的木棍組成一條邊,另外三根分別組成 33 條邊,拼成乙個邊長為 33 的正方形。蒜頭君希望你提前告訴他能不能拼出來,免得白費功夫。
輸入格式
首先輸入乙個整數 n(4 \le n \le 20)n(4≤n≤20),表示木棍數量,接下來輸入 nn 根木棍的長度 p_i(1 \le p_i \le 10000)pi(1≤pi≤10000)。
輸出格式
如果蒜頭君能拼出正方形,輸出"yes",否則輸出"no"。
樣例輸入1
41 1 1 1
樣例輸出1
yes樣例輸入2
510 20 30 40 50
樣例輸出2
no————————————————
將四個遞迴轉化成了1個!!
還需要後續思考,題目價值很大;
#include
using
namespace std;
int a[25]
=;int n=
0,s=0;
bool isok=
false
;bool visite[25]
=;void
dfs(
int sum,
int x,
int pos,
int b)
if(sum>b)
return;if
(sum==b)
dfs(
0,x+1,
0,b)
;for
(int i = pos; i < n; i++)}
}int
main()
if(s%4!=
0)dfs(0,
0,0,s/4)
;if(isok==
true
)printf
("yes");
else
printf
("no");
return0;
}
計蒜客 正方形
蒜頭君手上有一些小木棍,它們長短不一,蒜頭君想用這些木棍拼出乙個正方形,並且每根木棍都要用到。例如,蒜頭君手上有長度為 11,2 2,33,3 3,3 3 的 5 5 根木棍,他可以讓長度為11,2 2 的木棍組成一條邊,另外三根分別組成 3 3 條邊,拼成乙個邊長為 3 3 的正方形。蒜頭君希望你...
計蒜客 正方形 dfs剪枝
要點 記得剪枝呀!當滿足條件時候設定flag true,當其他分支發現flag true時,結束該分枝。include include include include using namespace std int n int p 5 定義4個桶 int sum 0 int len int a 10...
計蒜客 正方形 (dfs好題,具有參考價值)
題目 題目思路 先將木棍長度陣列降序排序,dfs前先判斷一下是否符合題意,然後進行dfs,dfs出結果就退出,需要剪枝的地方,dfs 用乙個引數記錄上一次搜尋的位置在 下一次搜尋只會在這條邊之後。搜尋完一條邊後pos再置為0。includeusing namespace std int l 30 b...