**题目大意:**给定一个矩阵,问最少通过多少部能够打出一个长大于等于 5 5 5,宽大于等于 4 4 4的传送门来。
**思路:**数据范围 400 400 400,暴力枚举四条边必然会超时,因此考虑优化方式-二维前缀和:
- 翻转次数 = 中间区域 1 1 1数量 + 四边中 0 0 0的数量 - 四个角如果有 0 0 0就减相应个数;
- 对于每个点 ( x , y ) (x, y) (x,y)分别从 x + 4 , y + 3 x+4,y+3 x+4,y+3入手开始扩展,每次计算总前缀和与内部前缀和相减,便是反转次数;
- 可以剪枝。如果当前已扫描到答案且扩展后的答案更大,那么就略过。
#include
using namespace std;
const int N = 500;
int g[N][N], f[N][N];
inline int get(int a, int b, int c, int d){ return f[a][b] + f[c - 1][d - 1] - f[a][d - 1] - f[c - 1][b]; }
inline void solve(){
int n, m; cin >> n >> m;
for(int i = 1; i s;
g[i][j] = s - '0';
}
for(int i = 1; i
关注
打赏
热门博文
- 回坑记之或许是退役赛季?
- [LCT刷题] P1501 [国家集训队]Tree II
- [LCT刷题] P2147 洞穴勘测
- 2022-2023 ICPC Brazil Subregional Programming Contest VP记录
- [线段树套单调栈] 2019-2020 ICPC Asia Hong Kong Regional Contest H.[Hold the Line]
- The 2021 ICPC Asia Nanjing Regional Contest E.Paimon Segment Tree 区间合并线段树/维护矩阵乘法
- CF580E - Kefa and Watch 线段树维护哈希
- HDU5869 Different GCD Subarray Query 离线查询/区间贡献
- 27.CF1004F Sonya and Bitwise OR 区间合并线段树
- 26.CF1000F One Occurrence