usaco-milk3-mother's milk-pass

这个题目比较抽象:

/*
ID: qq104801
LANG: C++
TASK: milk3
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>

#define NMAX 21
#define min(a,b) (a>b?b:a)

int a,b,c;
int v[21][21][21]={0};

void dfs(int x,int y,int z)
{
    if (x<0 || y<0 || z<0)return;
    if(!v[x][y][z])
    {
        v[x][y][z]=1;
        dfs(x+min(y,a-x),y-min(y,a-x),z);
        dfs(x+min(z,a-x),y,z-min(z,a-x));

        dfs(x-min(x,b-y),y+min(x,b-y),z);
        dfs(x,y+min(z,b-y),z-min(z,b-y));

        dfs(x-min(x,c-z),y,z+min(x,c-z));
        dfs(x,y-min(y,c-z),z+min(y,c-z));
    }
}

int k[21];
int t=0;

void test()
{
    FILE *fin = fopen ("milk3.in", "r");
    FILE *fout = fopen ("milk3.out", "w");
    fscanf(fin,"%d %d %d",&a,&b,&c);
    dfs(0,0,c);
    for(int i=0;i<21;i++)
        for(int j=0;j<21;j++)
        {
            if(v[0][j][i])k[t++]=i;
            //printf("%d\n",k[t-1]);
        }
    int i;
    for(i=0;i<t-1;++i)fprintf(fout,"%d ",k[i]);
    if(i)fprintf(fout,"%d\n",k[i]);

    fclose(fin);
    fclose(fout);
}

main () {
    test();
    exit (0);
}

测试用例:

USER: ll tom [qq104801]
TASK: milk3
LANG: C++

Compiling...
Compile: OK

Executing...
   Test 1: TEST OK [0.008 secs, 3532 KB]
   Test 2: TEST OK [0.005 secs, 3532 KB]
   Test 3: TEST OK [0.003 secs, 3532 KB]
   Test 4: TEST OK [0.011 secs, 3532 KB]
   Test 5: TEST OK [0.008 secs, 3532 KB]
   Test 6: TEST OK [0.008 secs, 3532 KB]
   Test 7: TEST OK [0.008 secs, 3532 KB]
   Test 8: TEST OK [0.011 secs, 3532 KB]
   Test 9: TEST OK [0.008 secs, 3532 KB]
   Test 10: TEST OK [0.008 secs, 3532 KB]

All tests OK.

YOUR PROGRAM (‘milk3‘) WORKED FIRST TIME! That‘s fantastic -- and a rare thing. Please accept these special automated congratulations.

Here are the test data inputs:

------- test 1 ----
2 5 10
------- test 2 ----
20 20 20
------- test 3 ----
5 11 15
------- test 4 ----
2 12 20
------- test 5 ----
19 4 11
------- test 6 ----
5 11 13
------- test 7 ----
3 20 20
------- test 8 ----
7 16 20
------- test 9 ----
20 10 9
------- test 10 ----
7 12 18

Keep up the good work!
Thanks for your submission!

usaco-milk3-mother's milk-pass

时间: 2024-12-20 05:49:21

usaco-milk3-mother's milk-pass的相关文章

【USACO】Mother&#39;s Milk(搜索)

一开始还在想去重的问题,结果发现后台数据貌似没有重复的情况= = /* ID: 18906421 LANG: C++ PROG: milk3 */ #include<cmath> #include<cstdio> #include<vector> #include<algorithm> using namespace std; const int maxn = 25; int vis[maxn][maxn][maxn] = {0}; vector<in

USACO 1.4 Mother&#39;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 m

usaco Mother&#39;s Milk

给了三个木桶的容量,起始状态下C木桶装满,然后三个木桶相互倒牛奶,问当A木桶为空时的C木桶的牛奶体积的可能情况. 直接深度优先搜索,模拟三个木桶相互倒的情况 相互倒得情况本可以写的更简洁,但为了可阅读性我并没有这么干 不过这道题在本机上调试时,我曾将一个我认为无关紧要的地方写错,因为两个数组大小一样,所以在sizeof的括号中写了另外一个,结果却出不了正解. 有机会要好好查查memcyp函数的用法. /* ID: modengd1 PROG: milk3 LANG: C++ */ #includ

USACO Mother&#39;s Milk(bfs)

题目请点我 题解: 水杯倒水的问题很经典,套路也是一样的,bfs找出所有状态.这道题的关键在于每次都应该进行六次的倒水尝试,细心一点.PS:三维数组表示状态真的很方便. 代码实现: /* ID: eashion LANG: C++ TASK: milk3 */ #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <queue> #

USACO Section1.4 Mother&#39;s Milk 解题报告

milk3解题报告 —— icedream61 博客园(转载请注明出处)------------------------------------------------------------------------------------------------------------------------------------------------[题目] 有三个桶,容量分别是A.B.C,开始C桶是满的. 你可以不断将某个桶的奶倒到另一个桶里,但只允许全倒过去,或者将后者倒满,前者留下

洛谷 P1215 [USACO1.4]母亲的牛奶 Mother&#39;s Milk

题目描述 农民约翰有三个容量分别是A,B,C升的桶,A,B,C分别是三个从1到20的整数, 最初,A和B桶都是空的,而C桶是装满牛奶的.有时,农民把牛奶从一个桶倒到另一个桶中,直到被灌桶装满或原桶空了.当然每一次灌注都是完全的.由于节约,牛奶不会有丢失. 写一个程序去帮助农民找出当A桶是空的时候,C桶中牛奶所剩量的所有可能性. 输入输出格式 输入格式: 单独的一行包括三个整数A,B和C. 输出格式: 只有一行,升序地列出当A桶是空的时候,C桶牛奶所剩量的所有可能性. 输入输出样例 输入样例#1:

Mother&#39;s Milk

本题中, 三个桶,因此就是6种:A->B A->C B->A B->C C->A C->B.所有转移都考虑一遍即可. 以A->B来说,这样转移之后状态是什么呢?A的 牛奶数应该是max(0, a+b-B),其中a,b是A和B桶中原来牛奶的数量,A,B是A和B桶的容量.B的牛奶数是 min(a+b, B),其他的以此类推.本题就差不多了.~ 代码: /* ID:Andy Chen PROG: milk3 LANG: C++ */ #include <cstdi

luogu P1215 [USACO1.4]母亲的牛奶 Mother&#39;s Milk

题目描述 农民约翰有三个容量分别是A,B,C升的桶,A,B,C分别是三个从1到20的整数, 最初,A和B桶都是空的,而C桶是装满牛奶的.有时,农民把牛奶从一个桶倒到另一个桶中,直到被灌桶装满或原桶空了.当然每一次灌注都是完全的.由于节约,牛奶不会有丢失. 写一个程序去帮助农民找出当A桶是空的时候,C桶中牛奶所剩量的所有可能性. 输入输出格式 输入格式: 单独的一行包括三个整数A,B和C. 输出格式: 只有一行,升序地列出当A桶是空的时候,C桶牛奶所剩量的所有可能性. 输入输出样例 输入样例#1:

[USACO1.4]母亲的牛奶 Mother&#39;s Milk

题目 题目描述 农民约翰有三个容量分别是A,B,C升的桶,A,B,C分别是三个从1到20的整数, 最初,A和B桶都是空的,而C桶是装满牛奶的.有时,农民把牛奶从一个桶倒到另一个桶中,直到被灌桶装满或原桶空了.当然每一次灌注都是完全的.由于节约,牛奶不会有丢失. 写一个程序去帮助农民找出当A桶是空的时候,C桶中牛奶所剩量的所有可能性. 输入输出格式 输入格式: 单独的一行包括三个整数A,B和C. 输出格式: 只有一行,升序地列出当A桶是空的时候,C桶牛奶所剩量的所有可能性. 输入输出样例 输入样例

$P1215 [USACO1.4]母亲的牛奶 Mother&#39;s Milk$

\(problem\) 搜索 找出当A桶是空的时候,C桶中牛奶所剩量的所有可能性. 显然 我们需要一个数组来判重 表示这种状态出现过没有. 然而 储存答案. 需要一个桶?或者sort咯 不过多个cnt 我咧懒得打. 所以我们用一个\(vis[N][N][N] ;\) 来判重 表示这种状态出现过没有 出现过就直接返回. 然后用一个ans数组来储存答案\(ans[N] ;\) 都是布尔型的就行. 然后进入程序片段. 一共三个字母 则倒法有 \(3!=1*2*3=6\). 那就手工模拟好了.不用循环了