hdu 1495 非常可乐
2015-09-16 20:16
218 查看
题目大意:中文题- -
解题思路:跟poj3414类似,题目本身不难,只是需要列举的状态比较多,用bfs,把情况列举出来就行了。
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1495
代码:
解题思路:跟poj3414类似,题目本身不难,只是需要列举的状态比较多,用bfs,把情况列举出来就行了。
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1495
代码:
#include <iostream> #include <string.h> #include <queue> using namespace std; int m,n,s; struct node { int x,y,all,step; }; int vis[101][101][101]; int bfs() { memset(vis,0,sizeof(vis)); node p; p.x=0; p.y=0; p.all=s; p.step=0; queue<node>q; q.push(p); vis[s][0][0]=1; while(!q.empty()) { p=q.front(); q.pop(); if((p.x==p.y&&p.all==0)||(p.x==p.all&&p.y==0)||(p.all==p.y&&p.x==0)) return p.step; node tmp; if(p.all!=0)//s->n or m; { if(p.x<n) { int minn=min(p.all,n-p.x); tmp=p; tmp.x+=minn; tmp.all-=minn; tmp.step=p.step+1; if(!vis[tmp.all][tmp.x][tmp.y]) { vis[tmp.all][tmp.x][tmp.y]=1; q.push(tmp); } } if(p.y<m) { int minn=min(p.all,m-p.y); tmp=p; tmp.y+=minn; tmp.all-=minn; tmp.step=p.step+1; if(!vis[tmp.all][tmp.x][tmp.y]) { vis[tmp.all][tmp.x][tmp.y]=1; q.push(tmp); } } } if(p.x!=0)//n->s or m { if(p.all<s) { tmp=p; int minn=min(p.x,s-p.all); tmp.x-=minn; tmp.all+=minn; tmp.step=p.step+1; if(!vis[tmp.all][tmp.x][tmp.y]) { vis[tmp.all][tmp.x][tmp.y]=1; q.push(tmp); } } if(p.y<m) { tmp=p; int minn=min(p.x,m-p.y); tmp.x-=minn; tmp.y+=minn; tmp.step=p.step+1; if(!vis[tmp.all][tmp.x][tmp.y]) { vis[tmp.all][tmp.x][tmp.y]=1; q.push(tmp); } } } if(p.y!=0) //m->s or n { if(p.all<s) { tmp=p; int minn=min(p.y,s-p.all); tmp.all+=minn; tmp.y-=minn; tmp.step=p.step+1; if(!vis[tmp.all][tmp.x][tmp.y]) { vis[tmp.all][tmp.x][tmp.y]=1; q.push(tmp); } } if(p.x<n) { tmp=p; int minn=min(p.y,n-p.x); tmp.x+=minn; tmp.y-=minn; tmp.step=p.step+1; if(!vis[tmp.all][tmp.x][tmp.y]) { vis[tmp.all][tmp.x][tmp.y]=1; q.push(tmp); } } } } return -1; } int main() { while(cin>>s>>n>>m) {int ans=bfs(); if(s==0&&n==0&&m==0) break; if(s%2) cout<<"NO"<<endl; else if(ans!=-1) cout<<ans<<endl; else cout<<"NO"<<endl; } return 0; }
相关文章推荐
- SDWebImage框架清除内存中的缓存图片
- 背包DP的标准代码模板
- Oracle建立表空间、建立用户、用户授权、指定表空间、激活用户、删除用户、删除表空间
- HDU 2037 今年暑假不AC
- UIScrollView
- 网易游戏2016校园招聘“游戏研发&平台开发”在线笔试——A题 Amusing Digits
- timer.schedule定时器的使用
- Android 自定义View——自定义View控件
- H5学习之旅-H5的元素属性(3)
- 工厂模式
- VC++创建和调用dll
- vim 配置集锦
- session的生命周期
- 前端性能优化(八)
- H5学习之旅-H5的元素属性(3)
- H5学习之旅-H5的元素属性(3)
- PX4(PIXHAWK)源码开发人员文档(三)——进程间通讯的开发者指南
- POJ 3268 Silver Cow Party(dijkstra最短路)
- UVA11205子集生成的应用
- TCP控制拥塞的四种算法:慢开始,拥塞避免,快重传,快恢复