我一直在尝试解决这个问题,但我不知道如何用数学方法来解决这个问题。
我们有一个包含每日捕获降水的数组。我们有另一个同样长度的数组,它有每天的用水量。问题是,为了在降水量为0的干燥日子里节约用水,容器必须有多大。
我试图通过找到一个具有最小和的连续子数组来解决这个问题,但是没有效果。
容器的大小必须能够在模拟季节计算的最小和最大存储空间之间进行缓冲:
double[] percipitation;
double[] waterUsage;
…
double volume = 0; // assuming empty Container at beginning
double maxVolume = 0;
double minVolume = double.MaxValue;
for (int i = 0; i < percipitation.Length; i++)
{
double surplus = percipitation[i] – waterUsage[i];
if (surplus > 0)
{
// store unused water assuming unlimited capacity
volume += surplus;
}
else
{
// consume stored water (surplus is <= 0)
// simulated volume might become negative!
volume += surplus;
}
// register limits reached so far
maxVolume = Math.Max(maxVolume, volume);
minVolume = Math.Min(minVolume, volume);
}
容器的尺寸必须达到(maxVolume – minVolume)
加安全余量。可以通过允许/模拟"溢出"来减小所需的尺寸。用水应考虑蒸发损失。