首页 > 代码库 > (中等) HDU 1495 非常可乐,BFS。
(中等) HDU 1495 非常可乐,BFS。
Description
大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为。因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享 这一瓶可乐,而且一定要喝的和seeyou一样多。但seeyou的手中只有两个杯子,它们的容量分别是N 毫升和M 毫升 可乐的体积为S (S<101)毫升 (正好装满一瓶) ,它们三个之间可以相互倒可乐 (都是没有刻度的,且 S==N+M,101>S>0,N>0,M>0) 。聪明的ACMER你们说他们能平分吗?如果能请输出倒可乐的最少的次数,如果不能输出"NO"。
直接BFS就好,100*100*100种状态,还是不会超。。。。。。(还有更好的方法吗?)
代码如下:
#include<iostream>#include<cstring>using namespace std;int que[1000006],las,fir;int A,B,C;long long vis[101][101][101];bool judge(int x,int y,int z){ if(vis[x][y][z]==-1) return 1; return 0;}long long slove(){ int temp,t1,t2,t3; int base; las=fir=0; memset(vis,-1,sizeof(vis)); que[las++]=A*110*110+0*110+0; vis[A][0][0]=0; while(las-fir) { temp=que[fir++]; t1=temp/(110*110); t2=(temp/110)%110; t3=temp%110; base=vis[t1][t2][t3]; if((t1==A/2&&(t2==A/2||t3==A/2))||(t2==A/2&&t3==A/2)) return base; temp=min(t1,B-t2); t1-=temp; t2+=temp; if(judge(t1,t2,t3)) { vis[t1][t2][t3]=base+1; que[las++]=t1*(110*110)+t2*110+t3; } t1+=temp; t2-=temp; temp=min(t1,C-t3); t1-=temp; t3+=temp; if(judge(t1,t2,t3)) { vis[t1][t2][t3]=base+1; que[las++]=t1*(110*110)+t2*110+t3; } t1+=temp; t3-=temp; temp=min(t2,A-t1); t2-=temp; t1+=temp; if(judge(t1,t2,t3)) { vis[t1][t2][t3]=base+1; que[las++]=t1*(110*110)+t2*110+t3; } t2+=temp; t1-=temp; temp=min(t2,C-t3); t2-=temp; t3+=temp; if(judge(t1,t2,t3)) { vis[t1][t2][t3]=base+1; que[las++]=t1*(110*110)+t2*110+t3; } t2+=temp; t3-=temp; temp=min(t3,A-t1); t3-=temp; t1+=temp; if(judge(t1,t2,t3)) { vis[t1][t2][t3]=base+1; que[las++]=t1*(110*110)+t2*110+t3; } t3+=temp; t1-=temp; temp=min(t3,B-t2); t3-=temp; t2+=temp; if(judge(t1,t2,t3)) { vis[t1][t2][t3]=base+1; que[las++]=t1*(110*110)+t2*110+t3; } t3+=temp; t2-=temp; } return -1;}int main(){ ios::sync_with_stdio(false); long long ans; for(cin>>A>>B>>C;A+B+C;cin>>A>>B>>C) { if(A%2) ans=-1; else ans=slove(); if(ans!=-1) cout<<ans<<endl; else cout<<"NO\n"; } return 0;}
(中等) HDU 1495 非常可乐,BFS。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。