• USACO1.4.4Mother's Milk


    Mother's Milk

    Farmer John has three milking buckets of capacity A, B, and C liters. Each of the numbers A, B, and C is an integer from 1 through 20, inclusive. Initially, buckets A and B are empty while bucket C is full of milk. Sometimes, FJ pours milk from one bucket to another until the second bucket is filled or the first bucket is empty. Once begun, a pour must be completed, of course. Being thrifty, no milk may be tossed out.

    Write a program to help FJ determine what amounts of milk he can leave in bucket C when he begins with three buckets as above, pours milk among the buckets for a while, and then notes that bucket A is empty.

    PROGRAM NAME: milk3

    INPUT FORMAT

    A single line with the three integers A, B, and C.

    SAMPLE INPUT (file milk3.in)

    8 9 10
    

    OUTPUT FORMAT

    A single line with a sorted list of all the possible amounts of milk that can be in bucket C when bucket A is empty.

    SAMPLE OUTPUT (file milk3.out)

    1 2 8 9 10
    

    SAMPLE INPUT (file milk3.in)

    2 5 10
    

    SAMPLE OUTPUT (file milk3.out)

    5 6 7 8 9 10
    解题思路:果断DFS啊,总共六种状态,C->A,C->B,B->A,A->B,A->C,B->C。每次要么被灌的桶装满或者原桶空了。要求按升序输出,由于桶容量最大才20,所以C桶的剩余量用一个20的数组标记一下就可以了。
    偶滴代码:
    View Code
     1 /*
     2 ID:spcjv51
     3 PROG:milk3
     4 LANG:C
     5 */
     6 #include<stdio.h>
     7 int f[25][25][25];
     8 int path[25];
     9 int a,b,c,total;
    10 void init()
    11 {
    12     scanf("%d%d%d",&a,&b,&c);
    13     memset(f,0,sizeof(f));
    14     memset(path,0,sizeof(path));
    15     total=0;
    16 }
    17 void search(int x,int y,int z)
    18 {
    19     if (f[x][y][z]) return;
    20     f[x][y][z]=1;
    21     if(x==0) path[z]=1;
    22     if(x+z<=a) search(x+z,y,0);
    23     else       search(a,y,z-a+x);
    24     if(y+z<=b) search(x,y+z,0);
    25     else       search(x,b,z+y-b);
    26     if(x+y<=a) search(x+y,0,z);
    27     else       search(a,y+x-a,z);
    28     if(x+y<=b) search(0,x+y,z);
    29     else       search(x+y-b,b,z);
    30     if(x+z<=c) search(0,y,x+z);
    31     else       search(x+z-c,y,c);
    32     if(y+z<=c) search(x,0,y+z);
    33     else       search(x,y+z-c,c);
    34 }
    35 void output()
    36 {
    37     int i,flag;
    38     flag=0;
    39     for(i=0; i<=20; i++)
    40         if(path[i]&&flag==0)
    41         {
    42             printf("%d",i);
    43             flag=1;
    44         }
    45         else if (path[i]&&flag!=0) printf(" %d",i);
    46     printf("\n");
    47 }
    48 int main(void)
    49 {
    50 
    51     freopen("milk3.in","r",stdin);
    52     freopen("milk3.out","w",stdout);
    53     init();
    54     search(0,0,c);
    55     output();
    56     return 0;
    57 }
    
    
  • 相关阅读:
    vue中webpack和less填坑:项目运行起来报错TypeError: this.getOptions is not a function
    js避坑历险记
    npm -S -D -g i 有什么区别
    Java 中无返回值的方法在使用时应该注意的问题
    java中方法的重载和覆盖
    Java中的内存划分
    git常用操作
    java代码书写易犯错误
    Java基础知识了解
    粘性定位position:sticky
  • 原文地址:https://www.cnblogs.com/zjbztianya/p/2882142.html
Copyright © 2020-2023  润新知