非常可樂bfs搜尋

2021-10-04 08:02:53 字數 1859 閱讀 4793

大家一定覺的運動以後喝可樂是一件很愜意的事情,但是seeyou卻不這麼認為。因為每次當seeyou買了可樂以後,阿牛就要求和seeyou一起分享這一瓶可樂,而且一定要喝的和seeyou一樣多。但seeyou的手中只有兩個杯子,它們的容量分別是n 毫公升和m 毫公升 可樂的體積為s (s<101)毫公升 (正好裝滿一瓶) ,它們三個之間可以相互倒可樂 (都是沒有刻度的,且 s==n+m,101>s>0,n>0,m>0) 。聰明的acmer你們說他們能平分嗎?如果能請輸出倒可樂的最少的次數,如果不能輸出"no"。
input

三個整數 : s 可樂的體積 , n 和 m是兩個杯子的容量,以"0 0 0"結束。

output

如果能平分的話請輸出最少要倒的次數,否則輸出"no"。

sample input

7 4 3

4 1 3

0 0 0

sample output

no

3

解題報告:這道題就是無腦的寫。。不過有個優化,可以用乙個三維的布林陣列來防止重複列舉,同時倒可樂的時候有六種情況一一枚舉就好了,注意坑點,他們倆一定要喝到相同的可樂並且他們倆可樂量加起來剛好是一瓶可樂的量。

#include

#include

#include

using

namespace std;

const

int n=

105;

bool st[n]

[n][n]

;int s,n,k;

struct node

;void

bfs(

int ss1,

int nn,

int kk,

int ss));

st[ss1][0

][0]

=1;while

(q.size()

)if(t.s&&t.s>=n-t.n&&

!st[t.s-n+t.n]

[n][t.k]))

;}if(t.s&&

!st[0]

[t.n+t.s]

[t.k]

&&t.s}if

(t.s&&t.s>=k-t.k&&

!st[t.s-k+t.k]

[t.n]

[k]));

}if(t.s&&

!st[0]

[t.n]

[t.k+t.s]

&&t.sst[0]

[t.n]

[t.k+t.s]

=true;}

if(t.n&&

!st[t.s+t.n][0

][t.k]))

;}if(t.n&&t.n>=k-t.k&&

!st[t.s]

[t.n-k+t.k]

[k]));

}if(t.n&&

!st[t.s][0

][t.k+t.n]

&&t.n}if

(t.k&&

!st[t.s+t.k]

[t.n][0

]));

}if(t.k&&t.k>=n-t.n&&

!st[t.s]

[n][t.k-n+t.n]))

; st[t.s]

[n][t.k-n+t.n]

=true;}

if(t.k&&

!st[t.s]

[t.n+t.k][0

]&&t.k}}

cout<<

"no"

<}int

main()

}

非常可樂 bfs

大家一定覺的運動以後喝可樂是一件很愜意的事情,但是seeyou卻不這麼認為。因為每次當seeyou買了可樂以後,阿牛就要求和seeyou一起分享這一瓶可樂,而且一定要喝的和seeyou一樣多。但seeyou的手中只有兩個杯子,它們的容量分別是n 毫公升和m 毫公升 可樂的體積為s s 101 毫公升...

非常可樂 BFS

大家一定覺的運動以後喝可樂是一件很愜意的事情,但是seeyou卻不這麼認為。因為每次當seeyou買了可樂以後,阿牛就要求和seeyou一起分享這一瓶可樂,而且一定要喝的和seeyou一樣多。但seeyou的手中只有兩個杯子,它們的容量分別是n 毫公升和m 毫公升 可樂的體積為s s 101 毫公升...

非常可樂(bfs

problem 非常可樂 description 大家一定覺的運動以後喝可樂是一件很愜意的事情,但是seeyou卻不這麼認為。因為每次當seeyou買了可樂以後,阿牛就要求和seeyou一起分享這一瓶可樂,而且一定要喝的和seeyou一樣多。但seeyou的手中只有兩個杯子,它們的容量分別是n 毫公...