Cod sursa(job #2780233)

Utilizator Alexandru_OlteanuAlexandru Olteanu Alexandru_Olteanu Data 6 octombrie 2021 15:27:52
Problema Jocul Flip Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.64 kb
/*
    Programmer : Alexandru Olteanu
*/
#include<bits/stdc++.h>
using namespace std;
// GCC Optimizations
// #pragma GCC optimize("Ofast");
// #pragma GCC target("fma,sse,sse2,sse3,ssse3,sse4,popcnt")
// #pragma GCC target("abm,mmx,avx,avx2,tune=native")
// #pragma GCC optimize(3)
// #pragma GCC optimize("inline")
// #pragma GCC optimize("-fgcse")
// #pragma GCC optimize("-fgcse-lm")
// #pragma GCC optimize("-fipa-sra")
// #pragma GCC optimize("-ftree-pre")
// #pragma GCC optimize("-ftree-vrp")
// #pragma GCC optimize("-fpeephole2")
// #pragma GCC optimize("-ffast-math")
// #pragma GCC optimize("-fsched-spec")
// #pragma GCC optimize("unroll-loops")
// Useful
mt19937 rng((unsigned int) chrono::steady_clock::now().time_since_epoch().count());
#define FastEverything  ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define HighPrecision cout<<fixed<<setprecision(17);
typedef long long ll;
typedef pair<int,int> pii;
ll const mod=1000000007LL;
ll const mod2 = 100000000LL;
ll const md=998244353LL;
ll mypowr(ll a,ll b, ll mod1) {ll res=1;if(b<0)b=0;a%=mod1; assert(b>=0);
for(;b;b>>=1){if(b&1)res=res*a%mod1;a=a*a%mod1;}return res;}
ll mypow(ll a,ll b) {ll res=1;if(b<0)b=0;assert(b>=0);
for(;b;b>>=1){if(b&1)res=res*a;a=a*a;}return res;}
#define pb push_back
#define fi first
#define se second
#define all(x) x.begin(),x.end()
#define rall(x) x.rbegin(), x.rend()

ifstream in("flip.in");
ofstream out("flip.out");
#define cin in
#define cout out

const ll infll = 9e18;
const int inf = 2e9;
const ll maxn = 2e1 + 2;

ll a[maxn][maxn];
ll sum[maxn];
ll cnt = -infll;

void build(int step, int n, int m, int val){
    if(step == 0){
        build(1, n, m, 0);
        build(1, n, m, 1);
        return;
    }
    if(step == n + 1){
        ll ans = 0;
        for(int i = 1; i <= m; ++i){
            ans += abs(sum[i]);
        }
        cnt = max(cnt, ans);
        return;
    }
    if(val == 1){
        for(int j = 1; j <= m; ++j){
            sum[j] -= 2 * a[step][j];
        }
    }
    build(step + 1, n, m, 0);
    build(step + 1, n, m, 1);
    if(val == 1){
        for(int j = 1; j <= m; ++j){
            sum[j] += 2 * a[step][j];
        }
    }
    return;
}

int main()
{
    FastEverything
    HighPrecision
    int test = 1;
    //cin>>test;
    for(int tt = 1; tt <= test; ++tt){
        int n, m;
        cin>>n>>m;
        for(int i = 1; i <= n; ++i){
            for(int j = 1; j <= m; ++j){
                cin>>a[i][j];
                sum[j] += a[i][j];
            }
        }
        build(0, n, m, 0);
        cout<<cnt<<'\n';
    }       


    return 0;
}