hdu 1485 非常可乐 题解
来源:互联网 发布:win7网络共享无法访问 编辑:程序博客网 时间:2024/04/30 11:37
参见小白书130页-131页,关键是在状态的存储,一开始用L*100+M*10+S存储每一个状态,L,M,S分别表示第一个第二个第三个杯子所含的可乐的量,不能过,因为这样的编码有重复。
#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 105;typedef int state[3];int L,M,S;state queues[10500];int vis[N][N][N];int dis[N][N][N];int fronts,rear;void cal(int &l,int &m,int &s,int n){ int all; switch(n) { case 0: all = M - m; if(all>l){m += l;l = 0;} else {l-=all;m = M;}break; case 1: all = S - s; if(all>l){s += l;l = 0;} else {l-=all;s = S;}break; case 2: all = L - l; if(all>m){l += m;m = 0;} else {m-=all;l = L;}break; case 3: all = S - s; if(all>m){s += m;m = 0;} else {m-=all;s = S;}break; case 4: all = L - l; if(all>s){l += s;s = 0;} else {s-=all;l = L;}break; case 5: all = M - m; if(all>s){m += s;s = 0;} else {s-=all;m = M;}break; }}bool chack(state u){ int l = u[0],m = u[1],s = u[2]; if(l == m && l+m == L)return 1; else if(l == s && l+s == L)return 1; else if(m == s && m+s == L)return 1; else return 0;}int bfs(){ fronts = 0;rear = 1; queues[fronts][0] = L;queues[fronts][1] = queues[fronts][2] = 0; vis[L][0][0] = 1; dis[L][0][0] = 0; while(rear > fronts){ state& u = queues[fronts++]; if(chack(u))return dis[u[0]][u[1]][u[2]]; int l = u[0]; int m = u[1]; int s = u[2]; for(int i = 0;i<6;i++){ int newl = l,newm = m,news = s; cal(newl,newm,news,i); if(!vis[newl][newm][news]){ queues[rear][0] = newl;queues[rear][1] = newm;queues[rear][2] = news;rear++; vis[newl][newm][news] = 1; dis[newl][newm][news] = dis[l][m][s] + 1; } } } return 0;}int main(){ while(scanf("%d%d%d",&L,&M,&S) == 3){ if(L == 0 && M == 0 && S == 0)break; memset(vis,0,sizeof(vis)); int num = bfs(); if(num)printf("%d\n",num); else printf("NO\n"); }return 0;}
0 0
- hdu 1485 非常可乐 题解
- HDU 非常可乐
- hdu 1495 非常可乐
- hdu 1495 非常可乐
- HDU 1495 非常可乐
- hdu 1495 非常可乐
- HDU 1495 非常可乐
- hdu 1495 非常可乐
- HDU 1495 非常可乐
- HDU 1495 非常可乐
- Hdu 1495 非常可乐
- HDU-1495-非常可乐
- hdu 1495 非常可乐
- HDU 1495 非常可乐
- HDU - 1495 非常可乐
- hdu 1495 非常可乐
- HDU 1495 非常可乐
- hdu-1495-非常可乐
- Linux 内核启动过程分析----zImage自解压
- ObjectiveC类的使用
- 第4周-项目3-用多文件组织多个类的程序-三角形类
- Hadoop学习之HBase的伪分布式安装
- P52第24题 完数问题
- hdu 1485 非常可乐 题解
- linux密码加密方式与暴力破解代码
- thinking in java 第二天
- 第四周上机项目1 三角形类的构造函数
- 第四周项目三用对象数组操作长方柱类
- leetcode-13 Roman to Integer
- JBoss主要版本下载链接一览
- 熬夜真伤
- Raspberry Pi:设置 tight VNC Server 为开机启动