農民約翰有三個容量分別是 a,b,c 公升的桶,a,b,c 分別是三個從1到20的整數。
最初,a 和 b 桶都是空的,而 c 桶是裝滿牛奶的。有時,農民把牛奶從乙個桶倒到另乙個桶中,直到被灌的桶裝滿或原桶空了。灌注的過程中牛奶不會灑出來。
找出當 a 桶是空的時候,c 桶中牛奶所剩量的所有可能性。
輸入一行三個數 a、b 和 c。
輸出一行數,數之間用空格隔開,公升序地列出當 a 桶是空的時候,c 桶牛奶所剩量的所有可能性。
8 9 10
1 2 8 9 10這一題的題解意思就是利用深度優先搜尋找尋出所有的可行方法
這一題就是六種方法 a->b,a->c,b->a,b->c,c->a,c->b
然後還需要進行相對應的剪枝,把相同的快速跳過。
不過對於倒牛奶的方式倒
是想不到這麼簡單的 我也是看題解才明白的
比如對於a牛奶倒到b牛奶當中要考慮a和b的現在的量以及相應的容量
先考慮a中的牛奶量 如果b-b就是可以倒入的牛奶量 大於a則應為a-a 如果小於a則為a-(b-b);
再考慮b中的牛奶量 也就是b+a或者是b+b-b兩種情況
具體看以下**
#include using namespace std;
int a,b,c;
int ac[30][30];//只記錄a和c的容量
void dfs(int a,int b,int c)
int main()
} return 0;
}
51nod 棋盤行走 深度優先搜尋
原樣題目連線 給乙個 n m 的棋盤,棋盤每個格仔顏色都是乙個大寫字母,以乙個格仔為起點,每次只能走上下左右四個方向,並且每個格仔只能走一次,要求 至少經過四個顏色相同的不同格仔最終走回起點 若可以輸出 yes,否則 no.直接 dfs,一直忘記回溯起點,wa到蹦 唉 後來考慮了下,的確完全沒必要用...
優先佇列 51Nod逛街
比較好的一道題,我們定義三個堆,q1,q2,q3,前兩個堆維護的要去的商店,q3維護的是不去的商店。當q1中的數量大於k之後我們就可以討論q2和q3了,如果我們q2中有的時間大於q3的時間那麼就可以交換,以便騰出更多的時間來逛更多的商店。include define int long long de...
51Nod 消滅兔子 (優先佇列)
消滅兔子 李陶冶 命題人 基準時間限制 1 秒 空間限制 131072 kb 分值 40 有n只兔子,每只有乙個血量b i 需要用箭殺死免子。有m種不同型別的箭可以選擇,每種箭對兔子的傷害值分別為d i 為p i 1 i m 假設每種箭只能使用一次,每只免子也只能被射一次,計算要消滅地圖上的所有兔子...