題目描述
一種新型的雷射炸彈,可以摧毀乙個邊長為r的正方形內的所有的目標。現在地圖上有n(n≤10000)個目標,用整數xi,yi(0≤xi,yi≤5000)表示目標在地圖上的位置,每個目標都有乙個價值0<vi<100。雷射炸彈的投放是通過衛星定位的,但其有乙個缺點,就是其爆破範圍,即那個邊長為r的正方形的邊必須和x,y軸平行。若目標位於爆破正方形的邊上,該目標將不會被摧毀。
現在你的任務是計算一顆炸彈最多能炸掉地圖上總價值為多少的目標。
輸入第一行為正整數n和正整數r,接下來的n行每行有3個正整數,分別表示xi,yi,vi。
輸出僅有乙個正整數,表示一顆炸彈最多能炸掉地圖上總價值為多少的目標(結果不會超過32767)。
樣例輸入
2 1樣例輸出0 0 1
1 1 1
1題目意思比較簡單,就是給乙個n*n的矩陣,矩陣裡面有一些點有權值,在給乙個邊長為r的正方形,問正方形最多可以包括多少權值。這個題目要求正方形必須與座標平行,所以我們可以試一下用二維字首和來維護矩形裡面的權值,先處理一下矩陣,然後列舉每個正方形,求出最大值,預處理方程為 f[i][j] = f[i][j]+f[i-1][j]+f[i][j-1]-f[i-1][j-1]; 求ans的方程為ans = max(ans, f[i][j]-f[i-r][j]-f[i][j-r]+f[i-r][j-r])。
ac**:
#include#include#includeusing namespace std;
const int maxn = 5000 + 50;
typedef long long ll;
int f[maxn][maxn];
int main()
int x, y, v;
memset(f, 0, sizeof(f));
for(int i = 0; i < n; ++ i)
for(int i = 1; i <= 5001; ++ i)
}int ans = 0;
for(int i = r; i <= 5001; ++ i)
}printf("%d\n", ans);
}return 0;
}
雷射炸彈 二維字首和
或者 一種新型的雷射炸彈,可以摧毀乙個邊長為 r 的正方形內的所有的目標。現在地圖上有 n個目標,用整數xi,yi表示目標在地圖上的位置,每個目標都有乙個價值wi。雷射炸彈的投放是通過衛星定位的,但其有乙個缺點,就是其 範圍,即那個邊長為 rr的正方形的邊必須和x,y軸平行。若目標位於爆破正方形的邊...
雷射炸彈 二維字首和
一種新型的雷射炸彈,可以摧毀乙個邊長為 r 的正方形內的所有的目標。現在地圖上有 n 個目標,用整數xi,yi表示目標在地圖上的位置,每個目標都有乙個價值wi。雷射炸彈的投放是通過衛星定位的,但其有乙個缺點,就是其 範圍,即那個邊長為 r 的正方形的邊必須和x,y軸平行。若目標位於爆破正方形的邊上,...
雷射炸彈(二維字首和 思維)
題目 一種炸彈可以將邊長為r的正方形內的所有目標摧毀,問一顆炸彈最多能摧毀多少價值的目標 以 1,1 為起始點,v i j 表示點 1,1 到點 i,j 矩陣的目標價值和。那麼如何計算v i j 模擬一維裡面 psum i psum i 1 右下角的位置為 i,j 左上角為 1,1 v i j 1 ...