图片说明
图片说明
图片说明

#include<bits/stdc++.h>
#define LL long long
using namespace std;

char ch[55][2505];
int f[55][55], val[55][55], DP[55][2505];
//val[i][j]:第i个木板涂j次色的最大正确格子数
//DP[i][j]:前i个木板涂j次色的最大正确格子数
int main(){
    int n, m, T;
    scanf("%d%d%d", &n, &m, &T);
    for(int i=1; i<=n; i++){
        scanf("%s", ch[i]+1);
    }
    for(int i=1; i<=n; i++){
        int cut[55]={0};
        memset(f, 0, sizeof(f));
        for(int j=1; j<=m; j++){
            cut[j]=cut[j-1]+ch[i][j]-'0';
        }
        for(int j=1; j<=m; j++){

            for(int k=1; k<=50; k++){
                for(int w=0; w<j; w++){
                    f[j][k]=max(f[j][k], f[w][k-1]+max(j-w-cut[j]+cut[w], cut[j]-cut[w]));
                }
                val[i][k]=max(f[j][k], val[i][k]);
            }
        }
    }
    for(int i=1; i<=n; i++){
        for(int j=1; j<=T; j++){
            for(int k=0; k<=j; k++){
                DP[i][j]=max(DP[i][j], DP[i-1][j-k]+val[i][k]);
            }
        }
    }
    printf("%d\n", DP[n][T]);


    return 0;
}