acm的一道问题,不知道为什么Time Limit Exceeded

2025-03-06 14:05:41
推荐回答(1个)
回答1:

如果你TLE的话,那么这就一定是一道卡常数时间的题了。

题意很简单,从你代码中也可以看出,你对每一个点的周围8个均做了判断,那么这一块计算的最大复杂度就是100*100*8,其实只要建一个辅助数组f[101][101],f[i][j]表示从左上角(0,0)到(i,j)的雷的总数量,那么f[i][j] = f[i-1][j] + f[i][j-1] - f[i-1][j-1] + ( (i,j)是否为雷 ? 1:0 );

通过这个递推式子可以在O(nm)也就是最坏100*100的情况下求得f[i][j]的所有值,最后输出答案的时候若(i,j)不是雷,那么(i,j)上的答案就是f[i+1][j+1] - f[i+1][j-2] - f[i-2][j+1] + f[i-2][j-2]。

这样就不用对每个点的相邻8个点一一进行判断,时间上就可以快8倍。希望这种利用容斥优化的思想对你有所帮助。