Submission #618491
Source Code Expand
using System;
using System.Collections.Generic;
using System.Linq;
class Program {
static string ReadLine() { return Console.ReadLine(); }
static int ReadInt() { return int.Parse(ReadLine()); }
static int[] ReadInts() { return ReadLine().Split().Select(int.Parse).ToArray(); }
static string[] ReadStrings() { return ReadLine().Split(); }
static int[,] Rotate(int[,] g) {
int rows = g.GetLength(0);
int cols = g.GetLength(1);
var t = new int[cols, rows];
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
t[j, rows-i-1] = g[i, j];
}
}
return t;
}
static long Calc(int[,] g) {
int rows = g.GetLength(0);
int cols = g.GetLength(1);
// 縦方向の和を求める
var sum = new long[rows, cols];
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
sum[i, j] = g[i, j];
if (i > 0) sum[i, j] += sum[i-1, j];
}
}
// row i から row j までの範囲に対して、部分列の最大和を求める
var maxRow = new long[rows, rows]; // maxRow[i, j] 行 i から行 j までの範囲の矩形の最大和
for (int i = 0; i < rows; i++)
for (int j = 0; j < rows; j++)
maxRow[i, j] = long.MinValue;
var dp = new long[cols];
for (int i = 0; i < rows; i++) {
for (int j = i; j < rows; j++) {
long max = long.MinValue;
for (int k = 0; k < cols; k++) {
long x = sum[j, k] - (i > 0 ? sum[i-1, k] : 0);
if (k == 0) dp[k] = x;
else dp[k] = Math.Max(dp[k-1] + x, x);
max = Math.Max(max, dp[k]);
}
maxRow[i, j] = max;
}
}
// 領域を二つに分割して、それぞれ最大和を求める
long ans = long.MinValue;
for (int i = 0; i < rows-1; i++) { // i までが top の領域
long topMax = long.MinValue;
long btmMax = long.MinValue;
for (int j = 0; j < rows; j++) { // 行 j から行 k までの矩形
for (int k = j; k < rows; k++) {
if (k <= i) topMax = Math.Max(topMax, maxRow[j, k]);
else if (j > i) btmMax = Math.Max(btmMax, maxRow[j, k]);
}
}
ans = Math.Max(ans, topMax + btmMax);
}
return ans;
}
static void Main() {
var hw = ReadInts();
int rows = hw[0], cols = hw[1];
var g = new int[rows, cols];
for (int i = 0; i < rows; i++) {
var xs = ReadInts();
for (int j = 0; j < cols; j++) {
g[i, j] = xs[j];
}
}
var ans = Math.Max(Calc(g), Calc(Rotate(g)));
Console.WriteLine(ans);
}
}
Submission Info
Submission Time |
|
Task |
D - 庭園 |
User |
noriok |
Language |
C# (Mono 3.2.1.0) |
Score |
100 |
Code Size |
3067 Byte |
Status |
AC |
Exec Time |
691 ms |
Memory |
16796 KB |
Judge Result
Set Name |
Sample |
Subtask1 |
All |
Score / Max Score |
0 / 0 |
50 / 50 |
50 / 50 |
Status |
|
|
|
Set Name |
Test Cases |
Sample |
sample0.txt, sample1.txt, sample2.txt, sample3.txt |
Subtask1 |
subtask0_0.txt, subtask0_1.txt, subtask0_10.txt, subtask0_11.txt, subtask0_12.txt, subtask0_13.txt, subtask0_14.txt, subtask0_2.txt, subtask0_3.txt, subtask0_4.txt, subtask0_5.txt, subtask0_6.txt, subtask0_7.txt, subtask0_8.txt, subtask0_9.txt |
All |
subtask0_0.txt, subtask0_1.txt, subtask0_10.txt, subtask0_11.txt, subtask0_12.txt, subtask0_13.txt, subtask0_14.txt, subtask0_2.txt, subtask0_3.txt, subtask0_4.txt, subtask0_5.txt, subtask0_6.txt, subtask0_7.txt, subtask0_8.txt, subtask0_9.txt, subtask1_0.txt, subtask1_1.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt, subtask1_13.txt, subtask1_14.txt, subtask1_2.txt, subtask1_3.txt, subtask1_4.txt, subtask1_5.txt, subtask1_6.txt, subtask1_7.txt, subtask1_8.txt, subtask1_9.txt |
Case Name |
Status |
Exec Time |
Memory |
sample0.txt |
AC |
127 ms |
9628 KB |
sample1.txt |
AC |
127 ms |
9716 KB |
sample2.txt |
AC |
128 ms |
9632 KB |
sample3.txt |
AC |
129 ms |
9752 KB |
subtask0_0.txt |
AC |
149 ms |
10048 KB |
subtask0_1.txt |
AC |
136 ms |
10032 KB |
subtask0_10.txt |
AC |
133 ms |
10076 KB |
subtask0_11.txt |
AC |
131 ms |
9940 KB |
subtask0_12.txt |
AC |
132 ms |
10032 KB |
subtask0_13.txt |
AC |
132 ms |
9916 KB |
subtask0_14.txt |
AC |
131 ms |
9908 KB |
subtask0_2.txt |
AC |
130 ms |
9988 KB |
subtask0_3.txt |
AC |
134 ms |
9908 KB |
subtask0_4.txt |
AC |
131 ms |
9908 KB |
subtask0_5.txt |
AC |
132 ms |
10044 KB |
subtask0_6.txt |
AC |
132 ms |
10028 KB |
subtask0_7.txt |
AC |
135 ms |
9908 KB |
subtask0_8.txt |
AC |
129 ms |
9952 KB |
subtask0_9.txt |
AC |
128 ms |
9912 KB |
subtask1_0.txt |
AC |
571 ms |
16320 KB |
subtask1_1.txt |
AC |
633 ms |
16636 KB |
subtask1_10.txt |
AC |
542 ms |
16144 KB |
subtask1_11.txt |
AC |
691 ms |
16768 KB |
subtask1_12.txt |
AC |
616 ms |
16380 KB |
subtask1_13.txt |
AC |
691 ms |
16796 KB |
subtask1_14.txt |
AC |
575 ms |
16284 KB |
subtask1_2.txt |
AC |
683 ms |
16752 KB |
subtask1_3.txt |
AC |
565 ms |
16272 KB |
subtask1_4.txt |
AC |
592 ms |
16416 KB |
subtask1_5.txt |
AC |
660 ms |
16668 KB |
subtask1_6.txt |
AC |
624 ms |
16456 KB |
subtask1_7.txt |
AC |
599 ms |
16380 KB |
subtask1_8.txt |
AC |
681 ms |
16788 KB |
subtask1_9.txt |
AC |
597 ms |
16404 KB |