90分,做了很多尝试(改输入,修改k的循环范围等),Hack过了,但一直WA on #7,不知道为什么,路过的大佬帮忙看看。
#include <bits/stdc++.h>
using namespace std;
string s[55];
int dp[55][55][2505][3];
int p,q,n,m,t;
int main()
{
scanf("%d%d%d",&n,&m,&t);
getchar();
for(int i=1;i<=n;i++){
getline(cin,s[i]);
s[i]=" "+s[i];
}
for(int i=1;i<=n;i++)
{
q=max(1,t-((n-i+1)*m-1));
p=min(t,(i-1)*m+1);
for(int k=q;k<=p;k++)
{
dp[i][1][k][2]=max(dp[i-1][m][k][2],max(dp[i-1][m][k][1],dp[i-1][m][k][0]));
dp[i][1][k][0]=max(dp[i-1][m][k-1][0],max(dp[i-1][m][k-1][1],dp[i-1][m][k-1][2]))+(s[i][1]=='0'?1:0);
dp[i][1][k][1]=max(dp[i-1][m][k-1][1],max(dp[i-1][m][k-1][0],dp[i-1][m][k-1][2]))+(s[i][1]=='1'?1:0);
}
for(int j=2;j<=m;j++)
{
q=max(1,t-((n-i+1)*m-j));
p=min(t,(i-1)*m+j);
for(int k=q;k<=p;k++)
{
dp[i][j][k][2]=max(dp[i][j-1][k][2],max(dp[i][j-1][k][1],dp[i][j-1][k][0]));
dp[i][j][k][0]=max(dp[i][j-1][k][0],max(dp[i][j-1][k-1][1],dp[i][j-1][k-1][2]))+(s[i][j]=='0'?1:0);
dp[i][j][k][1]=max(dp[i][j-1][k][1],max(dp[i][j-1][k-1][0],dp[i][j-1][k-1][2]))+(s[i][j]=='1'?1:0);
}
}
}
printf("%d",max(dp[n][m][t][0],max(dp[n][m][t][1],dp[n][m][t][2])));
return 0;
}