zoukankan      html  css  js  c++  java
  • HDU 1495 非常可乐

    http://acm.hdu.edu.cn/showproblem.php?pid=1495

    bfs,个人感觉很经典的题目,分六种情况搜索

    View Code
    #include <iostream>
    using namespace std ;
    int s,n,m ;
    int q[101*101*101][3] ;
    int dp[101][101][101] ;
    int bfs()
    {
        if(s&1)
            return 0 ;
        if(n<(s>>1))
            return 0 ;
        dp[s][0][0]=0 ;
        int front=0,rear=1 ;
        q[front][0]=s ,q[front][1]=0 ,q[front][2]=0 ;
        while(front<rear)
        {
            int x,y,z ;
            int xx,yy,zz ;
            int pour ;
            x=q[front][0] ,y=q[front][1] ,z=q[front][2] ;
            front++ ;
            //s->n
            if(x!=0 && y!=n)
            {
                pour=min(x,n-y) ;
                xx=x-pour ;
                yy=y+pour ;
                zz=z ;
                if(dp[xx][yy][zz]==-1)
                {
                    dp[xx][yy][zz]=dp[x][y][z]+1 ;
                    q[rear][0]=xx ,q[rear][1]=yy ,q[rear][2]=zz ;
                    rear++ ;
                }
            }
            //s->m
            if(x!=0 && z!=m)
            {
                pour=min(x,m-z) ;
                xx=x-pour ;
                yy=y ;
                zz=z+pour ;
                if(dp[xx][yy][zz]==-1)
                {
                    dp[xx][yy][zz]=dp[x][y][z]+1 ;
                    q[rear][0]=xx ,q[rear][1]=yy ,q[rear][2]=zz ;
                    rear++ ;
                }
            }
            //n->s
            if(y!=0 && x!=s)
            {
                pour=min(y,s-x) ;
                xx=x+pour ;
                yy=y-pour ;
                zz=z ;
                if(dp[xx][yy][zz]==-1)
                {
                    dp[xx][yy][zz]=dp[x][y][z]+1 ;
                    q[rear][0]=xx ,q[rear][1]=yy ,q[rear][2]=zz ;
                    rear++ ;
                }
            }
            //n->m
            if(y!=0 && z!=m)
            {
                pour=min(y,m-z) ;
                xx=x ;
                yy=y-pour ;
                zz=z+pour ;
                if(dp[xx][yy][zz]==-1)
                {
                    dp[xx][yy][zz]=dp[x][y][z]+1 ;
                    q[rear][0]=xx ,q[rear][1]=yy ,q[rear][2]=zz ;
                    rear++ ;
                }
            }
            //m->s
            if(z!=0 && x!=s)
            {
                pour=min(z,s-x) ;
                xx=x+pour ;
                yy=y ;
                zz=z-pour ;
                if(dp[xx][yy][zz]==-1)
                {
                    dp[xx][yy][zz]=dp[x][y][z]+1 ;
                    q[rear][0]=xx ,q[rear][1]=yy ,q[rear][2]=zz ;
                    rear++ ;
                }
            }
            //m->n
            if(z!=0 && y!=n)
            {
                pour=min(z,n-y) ;
                xx=x ;
                yy=y+pour ;
                zz=z-pour ;
                if(dp[xx][yy][zz]==-1)
                {
                    dp[xx][yy][zz]=dp[x][y][z]+1 ;
                    q[rear][0]=xx ,q[rear][1]=yy ,q[rear][2]=zz ;
                    rear++ ;
                }
            }
        }
        return dp[s>>1][s>>1][0] ;
    }
    int main()
    {
        while(scanf("%d%d%d",&s,&n,&m),(s||n||m))
        {
            if(n<m)
                n^=m^=n^=m ;
            memset(dp,-1,sizeof(dp)) ;
            int ans=bfs() ;
            if(ans<=0)
                puts("NO") ;
            else 
                printf("%d\n",ans) ;
        }
        return 0 ;
    }
  • 相关阅读:
    JQuery扩展方法
    RabbitMQ消息机制广播分发
    RabbitMQ消息机制单人分发
    对函数的参数求和
    ajax jsonp
    绑定函数bind()
    this 指向
    DOM兼容
    命名空间 namespace
    开始看编写高质量的代码
  • 原文地址:https://www.cnblogs.com/xiaohongmao/p/2537887.html
Copyright © 2011-2022 走看看