HDU 1495 非常可樂 (BFS)

2022-05-25 23:42:29 字數 1351 閱讀 6565

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

bfs時有6種操作,分別是s->m,s->n,n->s,n->m,m->s,m->n。每次講這6中情況放入佇列,遇到結果輸出即可。

若被分的可樂為奇數,那麼無法平分,因為給出的可樂都是整數。

#include 

#include

#include

#include

#define nmax 105

#define inf 1000000

using namespace std

;bool visit[nmax][nmax][nmax];

typedef structmes;

int n,m,s,ans,target;

void bfs()

,head;

temp.n = temp.m = temp.times = 0

; temp.s = s;

memset(visit,0,sizeof(visit));

visit[temp.n][temp.m][temp.s] = true;

q.push(temp);

while(!q.empty())

for(int i = 0

;i<6;++i)else

}else if(i == 1)else

}else if(i == 2)else

}else if( i == 3)else

}else if(i == 4)else

}else if(i == 5)else

}if(!visit[temp.n][temp.m][temp.s])}}

}int main()

// printf("n m s time\n");

// printf("%d %d %d\n",n,m,s);

ans = inf;

target = s/2

; bfs();

if(ans == inf) printf("no\n");

else printf("%d\n",ans);

}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 毫公升...