Pagini recente » Cod sursa (job #1176993) | Cod sursa (job #132370) | Cod sursa (job #56970) | Cod sursa (job #865512) | Cod sursa (job #2639869)
#include <bits/stdc++.h>
using namespace std;
ifstream f("flip.in");
ofstream g("flip.out");
ofstream g1("pep.out");
typedef long long ll;
const int dim=(1<<20),po=1e5;
const ll inf=-2e9;
ll n,m,ans0,ans1,S;
int main()
{
f>>n>>m;
/* srand (time(NULL));
int N=6,M=5;
for(int i=1;i<=N;i++,g1<<'\n')
for(int j=1;j<=M;j++)
{
ll v1=rand()%po+(-10000);g1<<v1<<' ';
}*/
vector < ll > sum(m+3,0),sum1(n+3,0);
vector < vector < ll > > v(n+3,vector < ll > (m+4));
vector < vector < ll > > dp(4, vector < ll > (dim,inf));
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
f>>v[i][j];
S+=v[i][j];
sum[j]+=v[i][j];
sum1[i]+=v[i][j];
}
dp[0][0]=0;
for(int j=0;j<m;j++) dp[0][0]+=sum[j];
ans0=S;
for(int i=1;i<(1<<m);i++)
{
for(int j=0;(1<<j)<=i;j++)
if( ( i & (1<<j) ) > 0 )
{
dp[0][i]=max(dp[0][i],dp[0][i^(1<<j)]-2*sum[j]);
}
ans0=max(ans0,dp[0][i]);
}
dp[1][0]=0;
for(int i=0;i<n;i++) dp[1][0]+=sum1[i];
ans1=S;
for(int i=1;i<(1<<n);i++)
{
for(int j=0;(1<<j)<=i;j++)
if( ( i & (1<<j) ) > 0 )
{
dp[1][i]=max(dp[1][i],dp[1][i^(1<<j)]-2*sum1[j]);
}
ans1=max(ans1,dp[1][i]);
}
g<<ans0+ans1-S;
return 0;
}