Lee • 2天前
using namespace std; long long dp[501][501][301]; char a[501][501];
int main() {
long long n, m, x, y;
cin >> y;
for (int l = 1; l <= y; l++) {
cin >> n >> m >> x;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cin >> a[i][j];
}
}
if (a[1][1] == '1' ) {
dp[1][1][1] = 0;
dp[1][1][0] = 1;
}else
if (a[1][1] == '?') {
dp[1][1][1] = 1;
dp[1][1][0] =0;
}else {
dp[1][1][1] = 0;
dp[1][1][0] =0;
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
for (int k = 1; k <= x; k++) {
if (i == 1 && j == 1) {
continue;
}
if (a[i][j] == '0') {
dp[i][j][k] = max(dp[i - 1][j][k], dp[i][j - 1][k]);
} else if (a[i][j] == '1') {
dp[i][j][k] = max(dp[i - 1][j][k], dp[i][j - 1][k]) + 1;
} else if (a[i][j] = '?') {
dp[i][j][k] = max(dp[i - 1][j][k], max(dp[i][j - 1][k], max(dp[i - 1][j][k - 1], dp[i][j - 1][k - 1]) + 1));
}
}
dp[i][j][0]=max(dp[i-1][j][0],dp[i][j-1][0])+(a[i][j] == '1');
}
}
long long fif = 0;
for (int i = 0; i <= x; i++) {
fif = max(fif, dp[n][m][i]);
}
cout << fif << endl;
}
return 0;
}
评论:
请先登录,才能进行评论