HDU 1495 非常可樂

2022-09-15 02:27:12 字數 1386 閱讀 4221

#include #include #include using namespace std;

struct point

q[250000];

bool status[104][104][104]; //代表標記該狀態是否被訪問過的陣列

int count = 0; //定義最少倒的次數

int s, n, m; //代表可樂的體積,兩個杯子的容量

int flag = 0;

struct point bfs(); //代表進行bfs的函式

void dfs(struct point end_point); //代表進行遞迴的函式(這裡用dfs表示)

void init(); //代表進行初始化的函式

void init()

} }}struct point bfs()

for (i = 0; i < 6; i++)

}else if (i == 1) //代表將s容器的水倒入m容器

}else if (i == 2) //代表將n容器的水倒入s容器

}else if (i == 3) //代表將n容器的水倒入m容器

}else if (i == 4) //代表將m容器的水倒入s容器

}else if (i == 5) //代表將m容器的水倒入n容器

}if (status[moves][moven][movem] == false) //如果該狀態還沒有訪問過

}if ((q[now].swater == mid && q[now].nwater == mid) || (q[now].swater == mid && q[now].mwater == mid) || (q[now].nwater == mid && q[now].mwater == mid))

now++;

} struct point bad;

bad.pre = -10000;

return bad;

}void dfs(struct point end_point)

if (end_point.pre != -1)

if (end_point.pre == -1)

dfs(q[end_point.pre]); //代表從當前狀態遞迴到該狀態之前的狀態

}int main()

else

}else

}count = 0;

flag = 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 若小杯子裡裝滿可樂,將小杯子裡的可樂倒入可...