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 ;
    }
  • 相关阅读:
    对于global的介绍
    elang和python互通的例子
    gen_server的一些心得
    erlang分布式例子
    erlang热部署
    erlang配置三方库
    opencv学习之PyImageSearch
    雅克比矩阵
    罗德里格斯公式的证明
    opencv学习网站
  • 原文地址:https://www.cnblogs.com/xiaohongmao/p/2537887.html
Copyright © 2011-2022 走看看