HDU1495非常可樂

2021-08-03 17:58:55 字數 1122 閱讀 9604

在這個題上作者至少卡了小半天。下面就是作者找到的一些wa點。1.在記錄是否被遍歷過的狀態時,用vis[n][n],來記錄是否被遍歷過。因為確定了其中兩個瓶子,第三個瓶子的狀態自然就知道了。關鍵時,記錄的時候,要用後兩個瓶子的裝酒狀態,因為,如果用前兩個瓶子的裝酒狀態的話。s裡的酒比a和b瓶子裡的酒都要多,若n太小會溢位。而若n太大可能會mlt或者tl。2.廣度優先搜尋一定會有乙個出棧的過程。一定要養成乙個良好的編**的習慣。3.思路一定要清晰,在進行狀態變化的時候,一定要注意,不要gg了。

#include 

#include

#include

#include

#include

using

namespace

std;

#define n 105

//排查了一上午的bug之一

//迷宮的規模

struct nodest;

//記錄兩種狀態

//1.記錄該步的狀態

//2.步數

int a,b,s;

int vis[n][n];

//標記該種狀態是否被走過

//廣搜佇列

int bfs()

node tmp;

//tmp用於暫時儲存狀態

int s=q.front().s;

int a=q.front().a;

int b=q.front().b;

int step=q.front().step;

int c;

//廣度試探

if(s&&a!=a)//s->a

}if(s&&b!=b)//s->b

}if(a&&s!=s)//a->s

}if(b&&s!=s)//b->s

}if(b&& a!=a)//b->a

}if(a&&b!=b)//a->b

}q.pop();//排除了一上午的bug

//侮辱智商了

}return0;}

int main()

if(aint ans;

ans= bfs();

if(!ans)cout

<<"no"

cout

0;}

hdu 1495 非常可樂

題意 給你三個容器讓你平分可樂,求最少的步數。思路 一看到求最少步數,就想到了廣搜,但是沒有思路,但看別人分情況,瞬間就明白啦。可以s n,s m,n s,n m,m s,m n這六種情況討論就行,每種又有倒完和倒不完兩種情況,直到出現兩個容器都有s 2,這就是最少步數。但s是奇數時是不能平分的,三...

hdu 1495 非常可樂

hdu 1495 非常可樂 題目大意 給你三個容器,他們的容量分別是 s,n,m 且s n m,給你s,n,m。s代表裝在容器裡可樂,n和m代表的是兩個杯子的容量,求他們能否平分這杯可樂。如果能就輸出倒的最小次數,如果不能就輸出 no。題目分析 也就是要達到能 s 2,0,s 2或 0 s 2,s ...

hdu 1495 非常可樂

兩個杯子按大小排序,為s m n,1.只要n滿了,就把n裡的東西放到s中 2.只要m非空,就把m中的放到n中 3.如果m為空,把s中的放到m中 超時 include int n,m,s int main if ss aa bb 0 得到均分 if bb b 若小杯子裡裝滿可樂,將小杯子裡的可樂倒入可...