hdu1495 平分可樂(bfs)

2021-09-10 17:42:50 字數 2176 閱讀 4374

大家一定覺的運動以後喝可樂是一件很愜意的事情,但是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 outputno3

題解:對於每一次倒可樂,可能的倒法最多有六種,1–>2,1–>3,2–>3,2–>1,3–>1,3–>2,用佇列存每一種狀態,用bfs遍歷訪問。

ac**

#include #include #include #include #include #include #include #includeusing namespace std;

bool p[105][105][105];

int half, sum;

struct node

;//s1,s2,s3分別記三個容器中的狀態(即裝了多少可樂),ant即倒到這種狀態用了多少步

void bfs(int a, int b, int c)

//因為沒有刻度,所以如果兩個加起來大於容器二的容積,則要把容器二倒滿

else //容器一的水都倒向容器二

m.s3 = n.s3;//容器三狀態不變

m.ant = n.ant + 1;

if (!p[m.s1][m.s2][m.s3])//如果該狀態是第一次出現,則把改狀態壓入佇列,其他倒的方式原理類似。

q.push(m);

p[m.s1][m.s2][m.s3] = true;

} if (n.s3 != c&&n.s1!=0)//1--3

else

m.s2 = n.s2;

m.ant = n.ant + 1;

if (!p[m.s1][m.s2][m.s3])

q.push(m);

p[m.s1][m.s2][m.s3] = true;

} if (n.s3 != c&&n.s2)//2--3

else

m.s1 = n.s1;

m.ant = n.ant + 1;

if (!p[m.s1][m.s2][m.s3])

q.push(m);

p[m.s1][m.s2][m.s3] = true;

} if (n.s2 != b&&n.s3)//3--2

else

m.s1 = n.s1;

m.ant = n.ant + 1;

if (!p[m.s1][m.s2][m.s3])

q.push(m);

p[m.s1][m.s2][m.s3] = true;

} if (n.s1 != a&&n.s2)//2--1

else

m.s3 = n.s3;

m.ant = n.ant + 1;

if (!p[m.s1][m.s2][m.s3])

q.push(m);

p[m.s1][m.s2][m.s3] = true;

}if (n.s1 != a&&n.s3)//3--1

else

m.s2 = n.s2;

m.ant = n.ant + 1;

if (!p[m.s1][m.s2][m.s3])

q.push(m);

p[m.s1][m.s2][m.s3] = true;

} }}int main()

//質數肯定沒辦法平分的。

memset(p, false, sizeof(p));

half = x / 2;

bfs(x, y, z);

if (sum)cout << "no" << endl;

} return 0;

}

hdu 1495 非常可樂 bfs

題目 剛開始那做這個題 怎麼也想不出為什麼可以用bfs 我認為做這個題目 你想到有6種情況哦 假設s 是瓶子 n,m 是有容量的杯子,s可以倒入n中 s也可以倒入m中 n可以倒入s中 n 也可以倒入m中 m也是一樣的哦 所以就有六種情況哦。下面看具體ac 裡面有註解哦 include include...

HDU 1495 非常可樂 (BFS)

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

hdu 1495 非常可樂 bfs

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