Submission #617079
Source Code Expand
#ifndef KOMAKI_LOCAL
#define NDEBUG
#endif
#include <bits/stdc++.h>
#include <sys/time.h>
#include <unistd.h>
using namespace std;
#define i64 int64_t
#define rep(i, n) for(i64 i = 0; i < ((i64)(n)); ++i)
#define sz(v) ((i64)((v).size()))
#define bit(n) (((i64)1)<<((i64)(n)))
#define all(v) (v).begin(), (v).end()
std::string dbgDelim(int &i){ return (i++ == 0 ? "" : ", "); }
#define dbgEmbrace(exp) { int i = 0; os << "{"; { exp; } os << "}"; return os; }
template <class T> std::ostream& operator<<(std::ostream &os, std::vector<T> v);
template <class T> std::ostream& operator<<(std::ostream &os, std::set<T> v);
template <class T> std::ostream& operator<<(std::ostream &os, std::queue<T> q);
template <class T> std::ostream& operator<<(std::ostream &os, std::priority_queue<T> q);
template <class T, class K> std::ostream& operator<<(std::ostream &os, std::pair<T, K> p);
template <class T, class K> std::ostream& operator<<(std::ostream &os, std::map<T, K> mp);
template <class T, class K> std::ostream& operator<<(std::ostream &os, std::unordered_map<T, K> mp);
template <int INDEX, class TUPLE> void dbgDeploy(std::ostream &os, TUPLE tuple){}
template <int INDEX, class TUPLE, class H, class ...Ts> void dbgDeploy(std::ostream &os, TUPLE t)
{ os << (INDEX == 0 ? "" : ", ") << get<INDEX>(t); dbgDeploy<INDEX + 1, TUPLE, Ts...>(os, t); }
template <class T, class K> void dbgDeploy(std::ostream &os, std::pair<T, K> p, std::string delim)
{ os << "(" << p.first << delim << p.second << ")"; }
template <class ...Ts> std::ostream& operator<<(std::ostream &os, std::tuple<Ts...> t)
{ os << "("; dbgDeploy<0, std::tuple<Ts...>, Ts...>(os, t); os << ")"; return os; }
template <class T, class K> std::ostream& operator<<(std::ostream &os, std::pair<T, K> p)
{ dbgDeploy(os, p, ", "); return os; }
template <class T> std::ostream& operator<<(std::ostream &os, std::vector<T> v)
{ dbgEmbrace( for(T t: v){ os << dbgDelim(i) << t; }); }
template <class T> std::ostream& operator<<(std::ostream &os, std::set<T> s)
{ dbgEmbrace( for(T t: s){ os << dbgDelim(i) << t; }); }
template <class T> std::ostream& operator<<(std::ostream &os, std::queue<T> q)
{ dbgEmbrace( for(; q.size(); q.pop()){ os << dbgDelim(i) << q.front(); }); }
template <class T> std::ostream& operator<<(std::ostream &os, std::priority_queue<T> q)
{ dbgEmbrace( for(; q.size(); q.pop()){ os << dbgDelim(i) << q.top(); }); }
template <class T, class K> std::ostream& operator<<(std::ostream &os, std::map<T, K> mp)
{ dbgEmbrace( for(auto p: mp){ os << dbgDelim(i); dbgDeploy(os, p, "->"); }); }
template <class T, class K> std::ostream& operator<<(std::ostream &os, std::unordered_map<T, K> mp)
{ dbgEmbrace( for(auto p: mp){ os << dbgDelim(i); dbgDeploy(os, p, "->"); }); }
#define DBG_OUT std::cerr
#define DBG_OVERLOAD(_1, _2, _3, _4, _5, _6, macro_name, ...) macro_name
#define DBG_LINE() { char s[99]; sprintf(s, "line:%3d | ", __LINE__); DBG_OUT << s; }
#define DBG_OUTPUT(v) { DBG_OUT << (#v) << "=" << (v); }
#define DBG1(v, ...) { DBG_OUTPUT(v); }
#define DBG2(v, ...) { DBG_OUTPUT(v); DBG_OUT << ", "; DBG1(__VA_ARGS__); }
#define DBG3(v, ...) { DBG_OUTPUT(v); DBG_OUT << ", "; DBG2(__VA_ARGS__); }
#define DBG4(v, ...) { DBG_OUTPUT(v); DBG_OUT << ", "; DBG3(__VA_ARGS__); }
#define DBG5(v, ...) { DBG_OUTPUT(v); DBG_OUT << ", "; DBG4(__VA_ARGS__); }
#define DBG6(v, ...) { DBG_OUTPUT(v); DBG_OUT << ", "; DBG5(__VA_ARGS__); }
#define DEBUG0() { DBG_LINE(); DBG_OUT << std::endl; }
#define DEBUG(...) \
{ \
DBG_LINE(); \
DBG_OVERLOAD(__VA_ARGS__, DBG6, DBG5, DBG4, DBG3, DBG2, DBG1)(__VA_ARGS__); \
DBG_OUT << std::endl; \
}
i64 solve(vector<vector<i64>> v)
{
i64 n = sz(v);
i64 m = sz(v[0]);
vector<vector<i64>> l_sum = v;
rep(i, n)rep(j, m)if(j) l_sum[i][j] += l_sum[i][j - 1];
vector<vector<i64>> bests(m, vector<i64>(m + 1));
rep(_r, m)rep(l, _r + 1){
i64 r = _r + 1;
vector<i64> a;
rep(i, n){
i64 total = 0;
if(0 < l) total -= l_sum[i][l - 1];
total += l_sum[i][_r];
a.push_back(total);
}
i64 best_ending_here = a[0];
i64 best_so_far = a[0];
for(i64 i = 1; i < n; ++i){
best_ending_here = max(a[i], best_ending_here + a[i]);
best_so_far = max(best_so_far, best_ending_here);
}
//DEBUG(l, r, best_so_far);
bests[l][r] = best_so_far;
}
i64 best = -bit(50);
rep(delim, m)if(delim){
i64 best_l = -bit(50);
i64 best_r = -bit(50);
for(i64 l = 0; l < delim; ++l){
for(i64 _r = l; _r < delim; ++_r){
best_l = max(best_l, bests[l][_r + 1]);
}
}
for(i64 l = delim; l < m; ++l){
for(i64 _r = l; _r < m; ++_r){
best_r = max(best_r, bests[l][_r + 1]);
}
}
best = max(best, best_l + best_r);
}
return best;
}
int main()
{
i64 n, m;
bool debug = !true;
if(debug){
n = 300;
m = 300;
}else{
cin >> n >> m;
}
vector<vector<i64>> rec0(n, vector<i64>(m));
vector<vector<i64>> rec1(m, vector<i64>(n));
rep(i, n)rep(j, m){
if(debug){
rec0[i][j] = 100;
}else{
cin >> rec0[i][j];
}
rec1[j][i] = rec0[i][j];
}
cout << max(solve(rec0), solve(rec1)) << endl;
}
Submission Info
Submission Time |
|
Task |
D - 庭園 |
User |
Komaki |
Language |
C++11 (GCC 4.9.2) |
Score |
100 |
Code Size |
5668 Byte |
Status |
AC |
Exec Time |
471 ms |
Memory |
4668 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 |
26 ms |
920 KB |
sample1.txt |
AC |
27 ms |
736 KB |
sample2.txt |
AC |
25 ms |
924 KB |
sample3.txt |
AC |
24 ms |
796 KB |
subtask0_0.txt |
AC |
27 ms |
796 KB |
subtask0_1.txt |
AC |
27 ms |
796 KB |
subtask0_10.txt |
AC |
30 ms |
864 KB |
subtask0_11.txt |
AC |
26 ms |
928 KB |
subtask0_12.txt |
AC |
27 ms |
804 KB |
subtask0_13.txt |
AC |
28 ms |
924 KB |
subtask0_14.txt |
AC |
29 ms |
796 KB |
subtask0_2.txt |
AC |
28 ms |
920 KB |
subtask0_3.txt |
AC |
30 ms |
920 KB |
subtask0_4.txt |
AC |
28 ms |
796 KB |
subtask0_5.txt |
AC |
28 ms |
920 KB |
subtask0_6.txt |
AC |
28 ms |
796 KB |
subtask0_7.txt |
AC |
29 ms |
920 KB |
subtask0_8.txt |
AC |
28 ms |
924 KB |
subtask0_9.txt |
AC |
28 ms |
800 KB |
subtask1_0.txt |
AC |
380 ms |
4104 KB |
subtask1_1.txt |
AC |
440 ms |
4420 KB |
subtask1_10.txt |
AC |
360 ms |
3832 KB |
subtask1_11.txt |
AC |
470 ms |
4596 KB |
subtask1_12.txt |
AC |
415 ms |
4164 KB |
subtask1_13.txt |
AC |
471 ms |
4668 KB |
subtask1_14.txt |
AC |
363 ms |
4108 KB |
subtask1_2.txt |
AC |
463 ms |
4556 KB |
subtask1_3.txt |
AC |
378 ms |
4064 KB |
subtask1_4.txt |
AC |
392 ms |
4284 KB |
subtask1_5.txt |
AC |
463 ms |
4448 KB |
subtask1_6.txt |
AC |
427 ms |
4224 KB |
subtask1_7.txt |
AC |
415 ms |
4152 KB |
subtask1_8.txt |
AC |
469 ms |
4648 KB |
subtask1_9.txt |
AC |
400 ms |
4304 KB |