1.确定状态
f
[
i
]
[
j
]
:
f[i][j]:
f[i][j]:表示第
i
i
i 行第
j
j
j 列异或的结果,属性表示权值。
2.状态转移方程:
f
[
0
]
[
0
]
=
m
a
t
r
i
x
[
0
]
[
0
]
f[0][0] = matrix[0][0]
f[0][0]=matrix[0][0]
f
[
i
]
[
j
]
f[i][j]
f[i][j] =
f
[
i
−
1
]
[
j
]
f[i-1][j]
f[i−1][j]
x
o
r
xor
xor
m
a
t
r
i
x
[
i
]
[
j
]
matrix[i][j]
matrix[i][j] (
1
≤
i
≤
n
−
1
1 \leq i \leq n-1
1≤i≤n−1,
j
j
j = 0)
f
[
i
]
[
j
]
f[i][j]
f[i][j] =
f
[
i
]
[
j
−
1
]
f[i][j-1]
f[i][j−1]
x
o
r
xor
xor
m
a
t
r
i
x
[
i
]
[
j
]
matrix[i][j]
matrix[i][j] (
1
≤
j
≤
n
−
1
1 \leq j \leq n-1
1≤j≤n−1,
i
i
i = 0)
f
[
i
]
[
j
]
f[i][j]
f[i][j] =
f
[
i
−
1
]
[
j
]
f[i-1][j]
f[i−1][j]
x
o
r
xor
xor
f
[
i
]
[
j
−
1
]
f[i][j-1]
f[i][j−1]
x
o
r
xor
xor
f
[
i
−
1
]
[
j
−
1
]
f[i-1][j-1]
f[i−1][j−1]
x
o
r
xor
xor
m
a
t
r
i
x
[
i
]
[
j
]
matrix[i][j]
matrix[i][j] (
1
≤
i
≤
m
−
1
,
1
≤
j
≤
n
−
1
1 \leq i \leq m-1, 1 \leq j \leq n-1
1≤i≤m−1,1≤j≤n−1)
class Solution {
public:
vector<int> v;
int kthLargestValue(vector<vector<int>>& matrix, int k) {
int m = matrix.size(), n = matrix[0].size();
int b[m+1][n+1];
memset(b,0,sizeof b);
v.clear();
for(int i = 0; i < m; i++)
{
for(int j = 0; j < n; j++)
{
if(i == 0 || j == 0)
{
if(i == 0 && j == 0) b[i][j] = matrix[i][j];
else if(i == 0 && j)
{
b[i][j] = b[i][j-1]^matrix[i][j];
}
else if(i && j == 0)
{
b[i][j] = b[i-1][j]^matrix[i][j];
}
v.push_back(b[i][j]);
}
else
{
b[i][j] = b[i][j-1]^b[i-1][j]^b[i-1][j-1]^matrix[i][j];
v.push_back(b[i][j]);
}
}
}
sort(v.begin(),v.end());
// for(auto x : v) cout<<x<<endl;
return v[v.size() - k];
}
};