-
Notifications
You must be signed in to change notification settings - Fork 59
/
Copy pathlivada2.cpp
59 lines (53 loc) · 1.41 KB
/
livada2.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# include <fstream>
# include <algorithm>
# define NR 305
# define inf 999999999
using namespace std;
ifstream f("livada2.in");
ofstream g("livada2.out");
int i,j,n,m,t,o,maxx,sol,costmax,ci,cs,S;
int a[NR][NR], cost[NR][NR], dr[NR][NR], st[NR][NR], mat[NR][NR], sst[NR], sdr[NR];
int maxim (int a, int b, int c, int d)
{
int maxx1=max(a, b);
int maxx2=max(c, d);
return max(maxx1, maxx2);
}
int main ()
{
f>>t;
//maxim [i][j]- maximul pe care il pot face intre i si j
//sus[j] - maximul unei bari care il cuprinde pe j
for (o=1; o<=t; ++o)
{
f>>n>>m; sol=-inf;
for (i=1; i<=n; ++i)
for (j=1; j<=m; ++j)
f>>a[i][j];
for (i=1; i<=n; ++i)
{
for (ci=1; ci<=m; ++ci)
{
S=0; maxsus=0;
for (cs=ci; cs<=m; ++cs)
{
S=S+a[i][cs]; maxsus=max(maxsus, sus[cs]);
maxim[ci][cs]=S+maxsus;
sol=max(sol, maxim[ci][cs]);
}
}
for (ci=1; ci<=m; ++ci)
{
S=0; maxsus=0;
for (cs=ci; cs<=m; ++cs)
{
S=S+a[i][cs]; maxsus=max(maxsus, sus[cs]);
maxim[ci][cs]=S+maxsus;
sol=max(sol, maxim[ci][cs]);
}
}
}
g<<sol<<"\n";
}
return 0;
}