大家一定覺的運動以後喝可樂是一件很愜意的事情,但是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 34 1 3
0 0 0
sample output
no3
該題考點為狀態變化,三個瓶子中有的飲料量即為狀態。
#include using namespace std;
const int maxn=100+5;
struct node
;int s,n,m;
int vis[maxn][maxn];
int bfs()
//s->n
if(st.s&&st.n!=n)
else
nxt.m=st.m;
nxt.step=st.step+1;
if(!vis[nxt.s][nxt.n])
} //s->m
if(st.s&&st.m!=m)
else
nxt.n=st.n;
nxt.step=st.step+1;
if(!vis[nxt.s][nxt.n])
} //m->s
if(st.m&&st.s!=s)
else
nxt.n=st.n;
nxt.step=st.step+1;
if(!vis[nxt.s][nxt.n])
} //m->n
if(st.m&&st.n!=n)
else
nxt.s=st.s;
nxt.step=st.step+1;
if(!vis[nxt.s][nxt.n])
} //n->s
if(st.n&&st.s!=s)
else
nxt.m=st.m;
nxt.step=st.step+1;
if(!vis[nxt.s][nxt.n])
} //n->m
if(st.n&&st.m!=m)
else
nxt.s=st.s;
nxt.step=st.step+1;
if(!vis[nxt.s][nxt.n])
} q.pop();
} return 0;
}int main()
{// int n,m,s;
while(cin>>s>>n>>m){
if(s==0&&n==0&&m==0)break;
if(n
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 毫公升...