• Mother's Mil 母亲的牛奶


    Description

    农民约翰有三个容量分别是A,B,C升的桶,A,B,C分别是三个从1到20的整数,最初,A和B桶都是空的,而C桶是装满牛奶的。有时,约翰把牛奶从一个桶倒到另一个桶中,直到被灌桶装满或原桶空了。当然每一次灌注都是完全的。由于节约,牛奶不会有丢失。 写一个程序去帮助约翰找出当A桶是空的时候,C桶中牛奶所剩量的所有可能性。

    Input

    单独的一行包括三个整数A,B和C。

    Output

    只有一行,列出当A桶是空的时候,C桶牛奶所剩量的所有可能性。

    Sample Input

    8 9 10

    Sample Output

    1 2 8 9 10


    刚开始以为这道题是对所有情况进行分类,发现有几个情况是很难直接找出来的,是一个循环的过程。
    后来听大佬说这个题用DFS做,当时有些蒙,,,咋用DFS

    静下心来想一想,发现是有规律的,A桶只能到给B桶和C桶,B桶C桶同理。也就是说,用递归把所有可能的组合方式都跑一遍,找出其中满足条件的C桶的容量。(感觉会T,会爆栈的呀)

    对于固定的方式,可用DFS搜索全部状态。

      1 #include<cstdio>
      2 #include<cstdlib>
      3 #include<cstring>
      4 #include<string>
      5 #include<cmath>
      6 #include<algorithm>
      7 #include<queue>
      8 #include<stack>
      9 #include<deque>
     10 #include<map>
     11 #include<iostream>
     12 using namespace std;
     13 typedef long long  LL;
     14 const double pi=acos(-1.0);
     15 const double e=exp(1);
     16 const int N = 200009;
     17 
     18 int x,y,z,cnt=1;
     19 int check[22][22][22],ans[100000];
     20 
     21 bool cmp(int a,int b)
     22 {
     23     return a<b;
     24 }
     25 void DFS(int a,int b,int c)
     26 {
     27     if(a!=0&&b!=0&&c!=z)
     28         check[a][b][c]=1;
     29     if(a==0&&check[a][b][c]!=2)
     30     {
     31         check[a][b][c]=2;
     32         ans[cnt++]=c;
     33     }
     34 
     35     if(a)
     36     {
     37         if(b!=y)
     38         {
     39             if(a>=(y-b))
     40                 if(check[a-(y-b)][y][c]==0)
     41                     DFS(a-(y-b),y,c);
     42             if(a<(y-b))
     43                 if(check[0][b+a][c]==0)
     44                     DFS(0,b+a,c);
     45         }
     46         if(c!=z)
     47         {
     48             if(a>=(z-c))
     49                 if(check[a-(z-c)][b][z]==0)
     50                     DFS(a-(z-c),b,z);
     51             if(a<(z-c))
     52                 if(check[0][b][c+a]==0)
     53                     DFS(0,b,c+a);
     54         }
     55     }
     56     if(b)
     57     {
     58         if(a!=x)
     59         {
     60             if(b>=(x-a))
     61                 if(check[x][b-(x-a)][c]==0)
     62                     DFS(x,b-(x-a),c);
     63             if(b<(x-a))
     64                 if(check[a+b][0][c]==0)
     65                     DFS(a+b,0,c);
     66         }
     67         if(c!=z)
     68         {
     69             if(b>=(z-c))
     70                 if(check[a][b-(z-c)][z])
     71                     DFS(a,b-(z-c),z);
     72             if(b<(z-c))
     73                 if(check[a][0][c+b])
     74                     DFS(a,0,c+b);
     75         }
     76     }
     77     if(c)
     78     {
     79         if(a!=x)
     80         {
     81             if(c>=(x-a))
     82                 if(check[x][b][c-(x-a)]==0)
     83                     DFS(x,b,c-(x-a));
     84             if(c<(x-a))
     85                 if(check[a+c][b][0]==0)
     86                     DFS(a+c,b,0);
     87         }
     88         if(b!=y)
     89         {
     90             if(c>=(y-b))
     91                 if(check[a][y][c-(y-b)]==0)
     92                     DFS(a,y,c-(y-b));
     93             if(c<(y-b))
     94                 if(check[a][b+c][0]==0)
     95                     DFS(a,b+c,0);
     96         }
     97     }
     98 }
     99 
    100 int main()
    101 {
    102     int i,p,j,n;
    103     scanf("%d%d%d",&x,&y,&z);
    104     check[0][0][z]=2;
    105     ans[0]=z;
    106     DFS(0,0,z);
    107     sort(ans,ans+cnt,cmp);
    108     printf("%d",ans[0]);
    109     for(i=1;i<cnt;i++)
    110         printf(" %d",ans[i]);
    111     putchar('
    ');
    112     return 0;
    113 }
    View Code
     
  • 相关阅读:
    从学算法体会如何更好的学习
    java数据结构与算法
    数据结构与算法资料汇总
    Oracle元数据查询总结
    Antlr词法分析之技巧——修改某个token
    动态规划公共子序列
    k8s笔记
    MiniDao1.9.0 版本发布,轻量级Java持久化框架
    autpoi 1.4.3版本发布—Excel傻瓜式API,快速实现Excel导入导出、Word模板导出
    喜讯!喜讯!JeecgBoot Github超 30000 Star—这个低代码平台你还不知道吗?
  • 原文地址:https://www.cnblogs.com/daybreaking/p/9721172.html
Copyright © 2020-2023  润新知