解決する必要があるのは次のとおりですが、これにアプローチする方法がわかりません。
隣接する駐車場があり、それらの配置は直線に似ています。各駐車場には値 (利益) が割り当てられています。必要な数のロットを購入できますが、それらは互いに隣接している必要があります (連続したセットで)。
入力(これは指定されています/入力するもの):
ロット数: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
}
この部分を理解できない場合を除いて、複数の回答がある場合、プログラムは駐車場の数が最も少ないものを作成する必要があります。