定義結構體儲存當前狀態的m, n, s杯中的可樂,t表示倒可樂次數。讀入m, n, s後保證m < n < s便於bfs,接下來就是6個方向的bfs。
bfs結束的條件是m杯中無可樂,也就是當前n杯的可樂與當前s杯的可樂相等,且n杯的可樂為總可樂體積的一半。接下來就是s倒入
m,s倒入n,m倒入n,n倒入m,m倒入s,n倒入s的6種情況,如果不滿足題意最後則輸出no。
ac**:
#include "iostream"
#include "cstdio"
#include "cstring"
#include "algorithm"
#include "queue"
using namespace std;
const int maxn = 105;
int s, n, m;
bool vis[maxn][maxn];
struct node
;void bfs()
if(x.s + x.m > m)
} else
} if(x.s + x.n > n)
} else
} if(x.m + x.n > n)
} else
} if(x.m + x.n > m)
} else
} y.s = x.s + x.m, y.m = 0, y.n = x.n, y.t = x.t + 1; // m倒入s
if(!vis[y.m][y.n])
y.s = x.s + x.n, y.m = x.m, y.n = 0, y.t = x.t + 1; // n倒入s
if(!vis[y.m][y.n])
} printf("no\n");
}int main(int argc, char const *argv)
if(m > n) swap(m, n);
bfs();
} return 0;
}
HDOJ 1495 非常可樂
題目描述 大家一定覺的運動以後喝可樂是一件很愜意的事情,但是seeyou卻不這麼認為。因為每次當seeyou買了可樂以後,阿牛就要求和seeyou一起分享這一瓶可樂,而且一定要喝的和seeyou一樣多。但seeyou的手中只有兩個杯子,它們的容量分別是n 毫公升和m 毫公升 可樂的體積為s s 10...
1495 非常可樂
看題目時萬萬沒想到是bfs 不過這種尋找最少次數的問題確實除了bfs也想不到其他辦法了orz problem description 大家一定覺的運動以後喝可樂是一件很愜意的事情,但是seeyou卻不這麼認為。因為每次當seeyou買了可樂以後,阿牛就要求和seeyou一起分享這一瓶可樂,而且一定要...
hdu 1495 bfs 非常可樂
題意 輸入s,m,n三個數,分別代表可樂,和兩個杯子,三個容器可以互相倒,問能不能把s平分,能的話輸出最小步數,不能就輸出no。思路 bfs,一共有六種情況,s m s向m裡倒 s n,m n,m s,n s,n m。用bfs暴搜,從佇列裡每取出乙個,就用這六種情況擴充套件一次,並把步數加一,直到搜...