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...