67 lines
1.6 KiB
C#
Executable File
67 lines
1.6 KiB
C#
Executable File
public class Solution
|
|
{
|
|
public int MaxCollectedFruits(int[][] fruits)
|
|
{
|
|
int n = fruits.Length;
|
|
int ans = 0;
|
|
for (int i = 0; i < n; ++i) ans += fruits[i][i];
|
|
|
|
int dp()
|
|
{
|
|
int[] prev = Enumerable.Repeat(int.MinValue, n).ToArray();
|
|
int[] curr = new int[n];
|
|
prev[n - 1] = fruits[0][n - 1];
|
|
for (int i = 1; i < n - 1; ++i)
|
|
{
|
|
Array.Fill(curr, int.MinValue);
|
|
for (int j = Math.Max(n - 1 - i, i + 1); j < n; ++j)
|
|
{
|
|
int best = prev[j];
|
|
if (j - 1 >= 0)
|
|
{
|
|
best = Math.Max(best, prev[j - 1]);
|
|
}
|
|
if (j + 1 < n)
|
|
{
|
|
best = Math.Max(best, prev[j + 1]);
|
|
}
|
|
curr[j] = best + fruits[i][j];
|
|
}
|
|
var temp = prev;
|
|
prev = curr;
|
|
curr = temp;
|
|
}
|
|
return prev[n - 1];
|
|
}
|
|
|
|
ans += dp();
|
|
|
|
for (int i = 0; i < n; ++i)
|
|
{
|
|
for (int j = 0; j < i; ++j)
|
|
{
|
|
var temp = fruits[j][i];
|
|
fruits[j][i] = fruits[i][j];
|
|
fruits[i][j] = temp;
|
|
}
|
|
}
|
|
|
|
ans += dp();
|
|
return ans;
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
class Program
|
|
{
|
|
static void Main()
|
|
{
|
|
var Solution = new Solution();
|
|
|
|
var fruits = new int[][] { [1,2,3,4],[5,6,8,7],[9,10,11,12],[13,14,15,16]};
|
|
|
|
Console.WriteLine(Solution.MaxCollectedFruits(fruits));
|
|
}
|
|
} |