計蒜客 正方形

2021-08-17 16:39:15 字數 1112 閱讀 9468

蒜頭君手上有一些小木棍,它們長短不一,蒜頭君想用這些木棍拼出乙個正方形,並且每根木棍都要用到。 例如,蒜頭君手上有長度為 11,2

2,33,3

3, 3

3 的 5

5 根木棍,他可以讓長度為11,2

2 的木棍組成一條邊,另外三根分別組成 3

3 條邊,拼成乙個邊長為 3

3 的正方形。蒜頭君希望你提前告訴他能不能拼出來,免得白費功夫。

首先輸入乙個整數 n(4 \le n \le 20)n(

4≤n≤

20),表示木棍數量,接下來輸入 n

n 根木棍的長度 p_i(1 \le p_i \le 10000)pi

​(1≤

pi​≤

1000

0)。如果蒜頭君能拼出正方形,輸出"yes",否則輸出"no"。

樣例輸入1

4

1 1 1 1

樣例輸出1

yes

樣例輸入2

5

10 20 30 40 50

樣例輸出2

no

ac

#include using namespace std;

int n,l[25],sum=0,t=0;

bool cmp(int a,int b)

void dfs(int k,int l1,int l2,int l3,int l4)//代表將小標為k的選擇性放入l1,l2,l3,l4;

if(k==n)//到達深搜終點

return ;

dfs(k+1,l1+l[k],l2,l3,l4);

dfs(k+1,l1,l2+l[k],l3,l4);

dfs(k+1,l1,l2,l3+l[k],l4);

dfs(k+1,l1,l2,l3,l4+l[k]);

} int main()

if(sum%4)//代表不能整除 直接排除

sum/=4;

sort(l,l+n,cmp);

dfs(0,0,0,0,0);

if(!t)

cout<<"no";

return 0;

}

計蒜客 正方形 難

蒜頭君手上有一些小木棍,它們長短不一,蒜頭君想用這些木棍拼出乙個正方形,並且每根木棍都要用到。例如,蒜頭君手上有長度為 11,22,33,33,33 的 55 根木棍,他可以讓長度為11,22 的木棍組成一條邊,另外三根分別組成 33 條邊,拼成乙個邊長為 33 的正方形。蒜頭君希望你提前告訴他能不...

計蒜客 正方形 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...