HDU 5937 Equation 搜尋 剪枝

2021-09-27 10:03:55 字數 1305 閱讀 3062

題目大意:給出1−9

1-91−

9每個數字的個數,問最多能組成多少個不同的形如a+b

=c

a+b=c

a+b=

c的式子。(1+2

=32+1

=31+4

=5

1+2=3 2+1=3 1+4=5

1+2=32

+1=3

1+4=

5這些都視為不同情況)

思路:真的爆搜就過了,只需要乙個特別簡單的剪枝。通過列舉發現最多只有36

3636

個式子,且數字i

ii只需要用到36−i

36-i

36−i

次。直接爆搜o(2

36)

o(2^)

o(236)

會超時,需要乙個小剪枝:假設我們當前該判斷第cur

curcu

r個式子,且有num

numnu

m個式子成立,答案為ans

ansan

s,那麼當36−c

ur+n

um

<=a

ns

36-cur+num<=ans

36−cur

+num

<=a

ns時,就沒有搜下去的必要了。

#include

#include

#include

#include

#include

#include

#include

#define inf 0x3f3f3f3f

using

namespace std;

typedef

long

long ll;

int a[10]

,d[40][

3],vis[12]

,ans;

void

init()

}//cout<}

void

dfs(

int cur,

int num)

++a[d[cur][0

]],++a[d[cur][1

]],++a[d[cur][2

]];dfs

(cur+

1,num);}

intmain()

if(!flag)

printf

("case #%d: %d\n"

,++times,36)

;else

}return0;

}

hdu 1254 推箱子 廣搜 深搜

注意以下幾點 1.箱子是否可走 2.人是否可達箱子後面 3.箱子的每個方向只走一次,而不是每個位置 廣搜箱子路徑,深搜人可否達箱子後面,記錄方向用visb 10 10 4 來記錄 include include include include include includeusing namespa...

hdu 1010 深搜 回溯

也不想解釋了,只是做來找回做題的感覺。遲d出個這方面的小總結,越來越發現對所學知識作總結的重要性了 1010tempter of the bone include includeint n,m,time int xs,ys,xd,yd int direc 4 2 char str 11 11 boo...

HDU 1401 Solitaire (雙向廣搜)

題意 在二維8 8的方格,給定4個初始點和4個最終點,問在8步內是否能從初始點走到最終點,雙向廣搜 同時對初始點和最終點廣搜4步,對每一步記錄狀態,初始點為 1 最終點為 2 若在限定時間內初始點的狀態能到達 2 或最終點的狀態能到達 1 則為yes!要記得排序。include include in...