#YHSP2003. 双杯装水

双杯装水

题目描述

小明拥有两个杯子 AABB ,容量分别为 XX 升和 YY 升。他试图通过一系列操作,使两个杯子装的水总量恰好为 NN 升。可执行的操作包括:

  1. 装满杯子 AA
  2. 装满杯子 BB
  3. AA 杯中的水倒入 BB 杯,直至 AA 杯倒空或者 BB 杯倒满。
  4. BB 杯中的水倒入 AA 杯,直至 BB 杯倒空或者 AA 杯倒满。
  5. 将杯子 AA 中的水倒入水池,清空杯子 AA(此操作不影响杯子 BB 中的水)。
  6. 将杯子 BB 中的水倒入水池,清空杯子 BB(此操作不影响杯子 AA 中的水)。

经过实践,小明发现可能无法精准得到 NN 升水,于是限定操作步数不超过 CC 步。请编程计算在不超过 CC 步操作的情况下,两个杯子装的水总量与 NN 的差值的最小值。

输入格式

输入 4 个整数 XXYYCCNN ,分别表示杯子 AA 的容量、杯子 BB 的容量、最大操作步数、目标水量 。其中 1X,Y1001 \leq X, Y \leq 1001N2001 \leq N \leq 2001C1001 \leq C \leq 100

输出格式

输出一个整数,即两个杯子装的水总量与 NN 的差值的最小值。

示例

  • 输入示例1
10 15 2 7
  • 输出示例1
3
  • 解释:初始时 AABB 两杯子水量为 0,00,0 。第一步可选择装满 AABB ,得到 10,010,00,150,15 。第二步有多种选择,如在 10,010,0 基础上装满 BB10,1510,15 ,或在 10,010,0 基础上将 AA 倒入 BB0,100,10 等。在所有可能状态中,两杯子水量之和与 77 的最小差值为 107=310 - 7 = 3
  • 输入示例2
85 15 5 36
  • 输出示例2
6
  • 输入示例3
71 37 5 95
  • 输出示例3
10