搜尋演算法 problem(1017)

2021-07-11 10:11:14 字數 1159 閱讀 3552

1.簡明題意

大家一定覺的運動以後喝可樂是一件很愜意的事情,但是seeyou卻不這麼認為。因為每次當seeyou買了可樂以後,阿牛就要求和seeyou一起分享這一瓶可樂,而且一定要喝的和seeyou一樣多。但seeyou的手中只有兩個杯子,它們的容量分別是n 毫公升和m 毫公升 可樂的體積為s (s<101)毫公升 (正好裝滿一瓶) ,它們三個之間可以相互倒可樂 (都是沒有刻度的,且 s==n+m,101>s>0,n>0,m>0) 。聰明的acmer你們說他們能平分嗎?如果能請輸出倒可樂的最少的次數,如果不能輸出"no"。

2.解題思路

找了很久規律還是無果(其實肯定有的),還是暴力搜尋吧,對於三個容器,用乙個結構題儲存三個狀態,每次尋找到乙個狀態的時候,判定是否已經滿足要求。在暴力的時候,我找了六個狀態,不知道是否可以再減少狀態量,這裡對於有6個狀態是沒有必要的,那就是對於單前容器,不要一次進行兩次倒置,即將其分給另外兩個容器(如果可行的話),這樣會大大增加**量,其實這個狀態能夠在下一次的計算中能夠暴力到。搜尋時記得記憶化,不然會形成死迴圈。

3.ac**

#include #include #include using namespace std;

int s,n,m;

int vis[105][105][105];

struct node

;int check(int x,int y,int z)//平分條件

int bfs()

}else//將n杯倒入s杯中不能將s杯倒滿

}if(a.n>m-a.m)//將n杯倒入m杯中能將m杯倒滿

}else//將n杯倒入m杯中不能將m杯倒滿}}

if(a.m)//同上

}else

}if(a.m>n-a.n)

}else}}

if(a.s)//同上

}else

}if(a.s>m-a.m)

}else}}

}return 0;

}int main()

memset(vis,0,sizeof(vis));

ans = bfs();

if(ans)

printf("%d\n",ans);

else

printf("no\n");

}return 0;

}

搜尋演算法 PROBLEM

今天胡老說考搜尋就是考暴力,沒有分的就不用來了,結果最後。我是唯一有分的,gg。第三道題太難了,我就不寫了。時間限制 1.0s,空間限制131072 kb 題目描述 給乙個六位數a 和另外乙個六位數b.你有一根魔法棒,初始時指向a 的最左邊數字,每一次你可以選擇下列操作 之一 1.將當前魔杖指向的數...

搜尋演算法 problem(1001)

1.簡明題意 這個題的意思就是輸入乙個y求8 x 4 7 x 3 2 x 2 3 x 6 y在0 100之間的解 2.解題思路 利用二分方法求出這個方程的極值點,然後帶入原方程就可以 3.感想 求乙個方程利用程式就可以求出來解,不論方程多複雜 4.ac include include include...

搜尋演算法 problem(1002)

1.簡明題意 求出方程f x 6 x 7 8 x 6 7 x 3 5 x 2 y x在0 100之間的最小值 2.解題思路 利用二分法對這個方程的一階導數進行處理,得到極值點,帶入原式 3.感想 和第一題一樣 4.ac include include includeusing namespace s...