zoukankan      html  css  js  c++  java
  • Pots POJ

    Pots

    小明给你两个容器,分别能装下A升水和B升水,并且可以进行以下操作
    FILL(i)        将第i个容器从水龙头里装满(1 ≤ i ≤ 2);
    DROP(i)        将第i个容器抽干
    POUR(i,j)      将第i个容器里的水倒入第j个容器(这次操作结束后产生两种结果,一是第j个容器倒满并且第i个容器依旧有剩余,二是第i个容器里的水全部倒入j中,第i个容器为空)
    现在要求你写一个程序,来找出能使其中任何一个容器里的水恰好有C升,找出最少操作数并给出操作过程

    Input

    有且只有一行,包含3个数A,B,C(1<=A,B<=100,C<=max(A,B))

    Output

    第一行包含一个数表示最小操作数K
    随后K行每行给出一次具体操作,如果有多种答案符合最小操作数,输出他们中的任意一种操作过程,如果你不能使两个容器中的任意一个满足恰好C升的话,输出“impossible”

    Sample Input

    3 5 4

    Sample Output

    6
    FILL(2)
    POUR(2,1)
    DROP(1)
    POUR(2,1)
    FILL(2)
    POUR(2,1)




    思路:
    开始时两个罐子都是空的,分6种情况搜索寻找最小值即可。

    代码:
      1 #include <set>
      2 #include <map>
      3 #include <list>
      4 #include <stack>
      5 #include <queue>
      6 #include <deque>
      7 #include <cmath>
      8 #include <string>
      9 #include <vector>
     10 #include <cstdio>
     11 #include <cstring>
     12 #include <cstdlib>
     13 #include <sstream>
     14 #include <iostream>
     15 #include <algorithm>
     16 //#include <unordered_map>
     17 #define INF 0x3f3f3f3f
     18 #define ll long long
     19 #define ull unsigned long long
     20 #define FILL(a,n,v) fill(a,a+n,v)
     21 #define Mset(a,v) memset(a,v,sizeof a)
     22 #define fcio ios::sync_with_stdio(false); cin.tie(0); cout.tie(0)
     23 using namespace std;
     24 
     25 int A,B,C;
     26 string op[1000];
     27 string res[1000];
     28 bool vis[200][200];
     29 bool flag;
     30 int cnt=0;
     31 int minn=INF;
     32 void dfs(int a,int b)
     33 {
     34     if(a==C||b==C)
     35     {
     36         flag=1;
     37         if(cnt<minn)
     38         {
     39             minn=cnt;
     40             for(int i=0;i<cnt;i++) res[i]=op[i];
     41         }
     42         return;
     43     }
     44     int aa,bb;
     45     //1
     46     aa=A;
     47     bb=b;
     48     if(vis[aa][bb])
     49     {
     50         vis[aa][bb]=false;
     51         op[cnt++]="FILL(1)";
     52         dfs(aa,bb);
     53         vis[aa][bb]=true;
     54         cnt--;
     55     }
     56     //2
     57     aa=a;
     58     bb=B;
     59     if(vis[aa][bb])
     60     {
     61         vis[aa][bb]=false;
     62         op[cnt++]="FILL(2)";
     63         dfs(aa,bb);
     64         vis[aa][bb]=true;
     65         cnt--;
     66     }
     67     //3
     68     aa=0;
     69     bb=b;
     70     if(vis[aa][bb])
     71     {
     72         vis[aa][bb]=false;
     73         op[cnt++]="DROP(1)";
     74         dfs(aa,bb);
     75         vis[aa][bb]=true;
     76         cnt--;
     77     }
     78     //4
     79     aa=a;
     80     bb=0;
     81     if(vis[aa][bb])
     82     {
     83         vis[aa][bb]=false;
     84         op[cnt++]="DROP(2)";
     85         dfs(aa,bb);
     86         vis[aa][bb]=true;
     87         cnt--;
     88     }
     89     //5
     90     aa=(a+b<=A?a+b:A);
     91     bb=a+b-aa;
     92     if(vis[aa][bb])
     93     {
     94         vis[aa][bb]=false;
     95         op[cnt++]="POUR(2,1)";
     96         dfs(aa,bb);
     97         vis[aa][bb]=true;
     98         cnt--;
     99     }
    100     //6
    101     bb=(a+b<=B?a+b:B);
    102     aa=a+b-bb;
    103     if(vis[aa][bb])
    104     {
    105         vis[aa][bb]=false;
    106         op[cnt++]="POUR(1,2)";
    107         dfs(aa,bb);
    108         vis[aa][bb]=true;
    109         cnt--;
    110     }
    111 }
    112 
    113 int main()
    114 {
    115     cin>>A>>B>>C;
    116     memset(vis,true,sizeof vis);
    117     flag=0;
    118     
    119     dfs(0,0);
    120     if(flag==0) cout<<"impossible"<<endl;
    121     else
    122     {
    123         cout<<minn<<endl;
    124         for(int i=0;i<minn;i++)
    125         {
    126             cout<<res[i]<<endl;
    127         }
    128     }
    129 }
  • 相关阅读:
    翻转矩阵
    零基础自学新概念英语的方法
    C语言错题小本子
    如何学习编程
    中文常用字体字符编码
    改变JavaScript代码行的背景色
    MyEclipse2016 live preview功能引发的问题,造成jsp页面乱码(各项属性设置正确后仍乱码)
    MyBatis使用出错 Cause: org.xml.sax.SAXParseException; 元素类型为 "dataSource" 的内容必须匹配 "(property)*"。
    ________________初学springboot11
    ________________初学springboot10
  • 原文地址:https://www.cnblogs.com/lihahahahaji/p/13450927.html
Copyright © 2011-2022 走看看