30分求条(必关
查看原帖
30分求条(必关
1418335
ceh666楼主2025/7/27 22:37

rt

#include<bits/stdc++.h>
using namespace std;
char a[505][505];
int dp[505][505][2];
signed main(){
    int t;
    cin >> t;
    while (t --) {
        int n, m, x;
        cin >> n >> m >> x;
        for (int i = 1; i <= n; i ++) {
            for (int j = 1; j <= m; j ++){
                cin >> a[i][j];
            }
        }
        for (int i = 1; i <= n; i ++) {
            for (int j = 1; j <= m; j ++) {
                for (int k = 0; k <= x; k ++) {
                    if (a[i][j] == '0') dp[i][j][k % 2] = max(dp[i - 1][j][k % 2], dp[i][j - 1][k % 2]);
                    if (a[i][j] == '1') dp[i][j][k % 2] = max(dp[i - 1][j][k % 2], dp[i][j - 1][k % 2]) + 1;
                    if (a[i][j] == '?') 
                        if (k % 2 == 0) dp[i][j][k % 2] = max(dp[i - 1][j][k % 2], dp[i][j - 1][k % 2]);
                        else dp[i][j][k % 2]= max(dp[i - 1][j][k % 2 - 1], dp[i][j - 1][k % 2 - 1]) + 1;
                }
            }
        }
        int ans = 0;
        for (int k = 0; k <= x; k ++) {
            ans = max(dp[n][m][k % 2], ans);
        }
        cout << ans << '\n';
    }
    return 0;
} 

2025/7/27 22:37
加载中...