【发布时间】:2019-01-19 17:22:42
【问题描述】:
2018 年 12 月的 USACO 青铜问题,BackForth 问题:http://usaco.org/index.php?page=viewproblem2&cpid=857
我的代码:
import java.util.*;
import java.io.*;
public class backforth
{
// static int[] poss = new int[2000];
static ArrayList<Integer> poss = new ArrayList<Integer>();
public static void tuesday(int milk, ArrayList<Integer> one, ArrayList<Integer> two)
{
for(int i = 0; i < one.size(); i++)
{
int x = one.get(i);
// ArrayList<Integer> twoNew = two; twoNew.add(x);
// ArrayList<Integer> oneNew = one; oneNew.remove(i);
two.add(x);
one.remove(i);
wednesday(milk - x, one, two);
}
}
public static void wednesday(int milk, ArrayList<Integer> one, ArrayList<Integer> two)
{
for(int i = 0; i < two.size(); i++)
{
int x = two.get(i);
// ArrayList<Integer> oneNew = one; oneNew.add(x);
// ArrayList<Integer> twoNew = two; twoNew.remove(i);
one.add(x);
two.remove(i);
thursday(milk + x, one, two);
}
}
public static void thursday(int milk, ArrayList<Integer> one, ArrayList<Integer> two)
{
for(int i = 0; i < one.size(); i++)
{
int x = one.get(i);
// ArrayList<Integer> twoNew = two; twoNew.add(x);
// ArrayList<Integer> oneNew = one; oneNew.remove(i);
two.add(x);
one.remove(i);
friday(milk - x, one, two);
}
}
public static void friday(int milk, ArrayList<Integer> one, ArrayList<Integer> two)
{
for(int i = 0; i < two.size(); i++)
{
int x = two.get(i);
int add = milk + x;
if(!poss.contains(add))
poss.add(add);
}
}
public static void main(String[] hi) throws IOException
{
BufferedReader in = new BufferedReader(new FileReader("backforth.in"));
PrintWriter out = new PrintWriter(new File("backforth.out"));
StringTokenizer st;
st = new StringTokenizer(in.readLine());
ArrayList<Integer> B1 = new ArrayList<Integer>();
ArrayList<Integer> B2 = new ArrayList<Integer>();
for(int i = 0; i < 10; i++)
{
B1.add(Integer.parseInt(st.nextToken()));
}
st = new StringTokenizer(in.readLine());
for(int i = 0; i < 10; i++)
{
B2.add(Integer.parseInt(st.nextToken()));
}
tuesday(1000, B1, B2);
//for(int i = 0; i < poss.size(); i++)
// System.out.println(poss.get(i) + " ");
System.out.println(poss.size());
in.close();out.close();
}
}
输出应该是 5,但我得到了 9。我不知道如何修复代码以获得正确的输出——我尝试了几种不同的方法,但我没有得到正确的输出。
我为 1 号牛舍获得的可能牛奶产量:
1008
1004
1007
1003
1005
1000
1001
996
997
9
不过,应该是1000, 1003, 1004, 1007, 1008。
【问题讨论】:
-
如果 cooyright 允许,最好在问题中包含问题陈述。我们可以很懒惰地点击这里的链接。此外,当我们试图让 Stack Overflow 成为持久的知识资源时,链接往往会随着时间的推移而失效。
-
在我的脑海中,问题描述说:“周一,Farmer John 测量了第一个谷仓的罐中正好 1000 加仑的牛奶,而第一个谷仓的罐中正好测量了 1000 加仑的牛奶。第二个谷仓。”我会更仔细地考虑该想法是否以及如何应用于代码尝试模拟不同场景(在所有函数中,而不仅仅是
tuesday。)在我看来,for循环中的迭代可能对意外版本起作用one和two。例如,尝试在tuesdayfor循环中的每次迭代开始时记录它们。