#GESP7008. [GESP202409七级] 矩阵移动

[GESP202409七级] 矩阵移动

题目背景

2024 年 9 月 GESP C++ 七级编程第 2 题

题目描述

⼩杨有⼀个有⼀个 n×mn×m 的矩阵,仅包含 01?01? 三种字符。矩阵的⾏从上到下编号依次为 1,2,...,n1,2,...,n,列从左到右编号依次为 1,2,...1,2,... ,m m 编号。⼩杨开始在矩阵的左上角( 1,11,1),⼩杨只能向下或者向右移动,最终到达右下角(n,mn,m)时停⽌,在移动的过程中每经过⼀个字符 11 得分会增加⼀分(包括起点和终点),经过其它字符则分数不变。⼩杨的初始分数为 00 分。

⼩杨可以将矩阵中不超过 xx 个字符 ?? 变为字符 11 。⼩杨在修改矩阵后,会以最优的策略从左上角移动到右下角。他想知道⾃⼰最多能获得多少分。

输入格式

第⼀⾏包含⼀个正整数 tt ,代表测试⽤例组数。

接下来是 tt 组测试⽤例。对于每组测试⽤例,⼀共 n+1n + 1 ⾏。

第⼀⾏包含三个正整数 n,m,xn,m,x,含义如题⾯所⽰。

之后 nn ⾏,每⾏包含⼀个长度为 mm 且仅包含 01?01? 三种字符的字符串。

输出格式

对于每组测试⽤例,输出⼀⾏⼀个整数,代表最优策略下⼩杨的得分最多是多少。

样例1

2
3 3 1
000
111
01?
3 3 1
000
?0?
01?
4
2

样例解释

对于第⼆组测试⽤例,将(1,11,1)或者 (3,33,3)变成 11 均是最优策略。

数据范围

子任务编号 数据点占比 tt n,mn,m xx
1 30%30\% 5\leq 5 10\leq 10 =1=1
2 30%30 \% 10\leq 10 500\leq 500 30\leq 30
3 40%40\% 10\leq 10 500\leq 500 300\leq 300

对于全部数据,保证有 1t101 \leq t \leq 101n,m500,1x3001 \leq n,m \leq 500, 1\leq x \leq 300,同时保证所有测试⽤例 n×mn \times m 的总和不超过 2.5×1052.5 \times 10^5