我有以下问题要解决,但我不确定该如何解决:
停车场彼此相邻,它们的位置类似于一条直线。每个停车场都有分配给它的价值(利润)。您可以购买任意数量的批次,但它们必须彼此相邻(在一个连续的集合中)。
输入(这是给定的/您要键入的内容):
批次数:9
每个停车场的值:即-5,0,7,-6,4,3,-5,0,2
表示(为了更容易查看)每个框包含每个批次的利润:

输出:应为:3 6 8含义:3-开始批次号,6-结束批次号,8-总利润(7 -6+4+ 3)
如果有多个答案,则程序应编写包含最少数量的停车场的答案。如果仍然有多个可能的答案,您的程序可以编写其中的任何一个。
请帮帮忙。提前谢谢。
编辑:我让它工作了:
/// <summary>
/// The problem 2.
/// </summary>
public class MySuperAwesomeClass
{
#region Constants and Fields
/// <summary>
/// The seq end.
/// </summary>
private static int seqEnd = -1;
/// <summary>
/// The seq start.
/// </summary>
private static int seqStart;
#endregion
// Quadratic maximum contiguous subsequence sum algorithm.
#region Public Methods and Operators
/// <summary>
/// The max sub sum 2.
/// </summary>
/// <param name="a">
/// The a.
/// </param>
/// <returns>
/// The max sub sum 2.
/// </returns>
public static int maxSumSub(int[] a)
{
int maxSum = 0;
for (int i = 0; i < a.Length; i++)
{
int thisSum = 0;
for (int j = i; j < a.Length; j++)
{
thisSum += a[j];
if (thisSum > maxSum)
{
maxSum = thisSum;
seqStart = i;
seqEnd = j;
}
}
}
return maxSum;
}
#endregion
#region Methods
/// <summary>
/// The main.
/// </summary>
private static void Main()
{
Console.WriteLine("Enter N:");
string stringInput = Console.ReadLine();
int[] a = new int[Convert.ToInt16(stringInput)];
Console.WriteLine("Enter profit values:");
for (int i = 0; i < Convert.ToInt16(stringInput); i++)
{
string value = Console.ReadLine();
a[i] = Convert.ToInt16(value);
}
int maxSum = maxSumSub(a);
Console.WriteLine(string.Format("{0} {1} {2}", seqStart, seqEnd, maxSum));
Console.ReadKey();
}
#endregion
}除了我不能计算出这一部分:如果有多个答案,程序应该写一个包含最少数量的停车场。
发布于 2012-06-13 15:05:57
这是经典的最大子集和问题。没有代码,因为这是家庭作业,但这里是一般的解决方案。如果你仍然被卡住了,我相信你可以通过搜索标题在线找到代码。
发布于 2012-06-13 15:08:28
这里有一个提示,可以让算法更有效:看看每一端的总和是如何加起来的。例如,根据您提供的内容,从左侧开始,总数将是-5,-5,2,-4,0,3,-2,-2,0,0,从右侧开始,它们将是2,2,-3,0,4,-2,5,5,0。
https://stackoverflow.com/questions/11009506
复制相似问题