貌似uva崩了,現在進不去,所以這道題還判斷正確與否,其實無所謂了,我這是看的網上的**,寫的基本上一樣,唉,沒辦法,不會做,又看了網上的題解,認真寫理解吧還是。。。
構造了乙個結構體,water陣列用來儲存三個杯子的狀態,sum用來儲存當前的倒水量,visit陣列用來儲存狀態,以
防他們重複訪問,三個杯子只需要兩個杯子來判斷,第三個已經確定,所以開乙個二維陣列就可以了。。。然後用
reach陣列來儲存所有的倒水量,下標是目標水量,值是一共的倒水量。。。
只需要一次bfs最多有200*200種狀態,然後從這些狀態中找到想要求的目標水量對應的到水量就可以了。。。
二維陣列來判斷是否重複是個好方法,只可惜我沒想出來,。。。。繼續加油!!!
另外還出了點bug,找了一上午。。。原來是優先順序問題,if語句裡面的,以後都老老實實加括號算了。。。
**:
#include#include#include#includeusing namespace std;
int visit[205][205];
int reach[205];
int a[3];
struct state
stt,st2;
void solve()
return ;
}void bfs()
}} }
return ;
}int main()
} }return 0;
}
uva好了,已經a了
UVa10603 Fill 優先佇列搜尋
include include include include using namespace std const int maxn 207 bool vis maxn maxn 實際上兩個杯子的狀態就可以確定整個三元組的狀態 int path maxn maxn 2 同於儲存路徑,儲存的是指向他的...
例題7 8 UVA 10603 Fill 倒水問題
2017.1.24 重新做了一遍這個題目。三個杯子,總水量是一樣的,只需要記錄前兩個杯子來作為狀態來判重即可。然後他要求總到水量最小,直接貪心就好了,優先選取總水量最小的,用優先佇列即可。然後找乙個最接近d的答案即可。include include include include using nam...
uva 10603 倒水問題
劉汝佳說這是一道最短路,可是我怎麼也想不出如何建圖,把問題轉換為最短路問題,我就想自己的辦法。感覺這個題可以用三維dp 每一維代表乙個瓶子 f maxn maxn maxn 狀態轉移我就想 每一次倒水一定要把乙個倒完或把另乙個裝滿才有意義,因為只有這樣三個瓶的水量才知道 所以可以根據這個進行狀態轉移...