B a c k Back Back a n d and and F o r t h Forth Forth 题解
题目
题目描述
Farmer John有两个挤奶棚,每个挤奶棚里各有一个奶罐和一个装有10个各种尺寸的桶的储物柜。他喜欢将在两个挤奶棚之间来回运送牛奶作为一种锻炼方式。
周一,Farmer John量了恰好1000加仑的牛奶放在第一个挤奶棚的奶罐里,又量了恰好1000加仑的牛奶放在第二个挤奶棚的奶罐里。
周二,他从第一个挤奶棚里取出一个桶,并装满牛奶,然后将牛奶运到第二个挤奶棚,并将牛奶倒进奶罐。他把这个桶留在了第二个挤奶棚。
周三,他从第二个挤奶棚里取出一个桶(可能是周二留在这里的),并装满牛奶,然后将牛奶运到第一个挤奶棚,并将牛奶倒进奶罐。他把这个桶留在了第一个挤奶棚。
周四,他从第一个挤奶棚里取出一个桶(可能是周三留在这里的),并装满牛奶,然后将牛奶运到第二个挤奶棚,并将牛奶倒进奶罐。他把这个桶留在了第二个挤奶棚。
周五,他从第二个挤奶棚里取出一个桶(可能是周二或周四留在这里的),并装满牛奶,然后将牛奶运到第一个挤奶棚,并将牛奶倒进奶罐。他把这个桶留在了第一个挤奶棚。
此时Farmer John测量了第一个挤奶棚的奶罐里的牛奶。他总共可能得到多少种不同的读数?
输入
输入的第一行包含10个整数,为第一个挤奶棚里初始的桶的容积。输入的第二行也包含10个整数,为第二个挤奶棚里初始的桶的容积。所有桶的容积均在1…100的范围内。
输出
输出Farmer John在周五之后测量第一个挤奶棚里的奶罐的牛奶时可能得到的读数的数量。
样例输入
1 1 1 1 1 1 1 1 1 2
5 5 5 5 5 5 5 5 5 5
样例输出
5
数据范围限制
提示
在这个例子中,最后第一个挤奶棚的奶罐中的牛奶量总共有5种可能的结果:
1000:FJ可以在每次往返的时候都携带同一个桶,从而不会改变第一个挤奶棚的奶罐的牛奶量。
1003:FJ可以在周二运送2个单位,周三5个单位,周四1个单位,周五1个单位。
1004:FJ可以在周二运送1个单位,周三5个单位,周四1个单位,周五1个单位。
1007:FJ可以在周二运送1个单位,周三5个单位,周四2个单位,周五5个单位。
1008:FJ可以在周二运送1个单位,周三5个单位,周四1个单位,周五5个单位。
解题方法
直接
d
f
s
dfs
dfs或者暴力枚举,其实都是一样的。
我们只要枚举出所有情况,然后用一个标记数组来存(我怕会爆,所以没有用这种方法),最后统计。
我的方法:
把所有情况列出来并排序。
接下来设
f
i
f_i
fi表示
i
i
i之前(包括
i
i
i)一共有多少种类型,则
f
i
=
{
f
i
−
1
+
1
a
i
≠
a
i
−
1
f
i
−
1
a
i
=
a
i
−
1
f_i=\begin{cases} f_{i-1}+1 & a_i\not=a_{i-1}\\ f_{i-1} & a_i=a_{i-1} \end{cases}
fi={fi−1+1fi−1ai=ai−1ai=ai−1
答案就是
f
n
f_n
fn。
注:
a
a
a表示排完序的序列,
n
n
n表示
a
a
a的元素个数。