题解区貌似没这么写的
求原因
#include<bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
inline int read() {int x=0,f=1; char ch=getchar();while(ch<'0'||ch>'9') { if(ch=='-') f=-1; ch=getchar();}while(ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar();return x*f;}
int n,m,t;
int dp[2502][55][55];//当前使用了多少次粉刷 到了第i行第j个格子 的最大正确粉刷数量
bool col[55][55];
int res[55][55][55][2];//qzh
signed main(){
n=read(),m=read(),t=read();
for(int ii=1;ii<=n;ii++){
string ss;cin>>ss;
ss='!'+ss;
for(int i=1;i<=m;i++)for(int j=i;j<=m;j++)res[ii][i][j][0]=res[ii][i][j-1][0]+(ss[j]=='0'),res[ii][i][j][1]=res[ii][i][j-1][1]+(ss[j]=='1');
}
int ans=0;
for(int q=1;q<=t;q++){
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
for(int k=j+1;k<=m;k++){
dp[q][i][k]=max(dp[q][i][k],dp[q-1][i][k]);
dp[q][i][k]=max(dp[q][i][k],dp[q-1][i][j]+max(res[i][j-1][k][0],res[i][j-1][k][1]));
ans=max(ans,dp[q][i][k]);
}
}
}
}
cout<<ans<<endl;
return 0;
}