Time Limits: 5000 ms Memory Limits: 65536 KB Detailed Limits
1 #include<bits/stdc++.h> 2 using namespace std; 3 inline int read() 4 { 5 int x=0;char ch=getchar(); 6 while(ch<'0'||ch>'9')ch=getchar(); 7 while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} 8 return x; 9 } 10 int n,m,t,ans; 11 int sum[55]; 12 int f[55][55],dp[55][2505]; 13 char s[60]; 14 int main() 15 { 16 n=read(); 17 m=read(); 18 t=read(); 19 for(int i=1;i<=n;i++) 20 { 21 scanf("%s",s+1); 22 for(int j=1;j<=m;j++) 23 sum[j]=sum[j-1]+(s[j]=='1'); 24 for(int j=1;j<=m;j++) 25 for(int x=1;x<=m;x++) 26 { 27 f[x][j]=0; 28 for(int y=0;y<x;y++) 29 { 30 int tmp=sum[x]-sum[y]; 31 f[x][j]=max(f[x][j],f[y][j-1]+max(tmp,x-y-tmp)); 32 } 33 } 34 for(int j=1;j<=t;j++) 35 { 36 int tmp=min(m,j); 37 for(int k=1;k<=tmp;k++) 38 dp[i][j]=max(dp[i][j],dp[i-1][j-k]+f[m][k]); 39 } 40 } 41 for(int i=1;i<=t;i++) 42 ans=max(dp[n][i],ans); 43 printf("%d",ans); 44 return 0; 45 }