地圖上有 n 個目標,用整數xi,yi表示目標在地圖上的位置,每個目標都有乙個價值wi。
注意:不同目標可能在同一位置。
現在有一種新型的雷射炸彈,可以摧毀乙個包含 r×r 個位置的正方形內的所有目標。
雷射炸彈的投放是通過衛星定位的,但其有乙個缺點,就是其**範圍,即那個正方形的邊必須和x,y軸平行。
求一顆炸彈最多能炸掉地圖上總價值為多少的目標。
輸入格式
第一行輸入正整數 n 和 r ,分別代表地圖上的目標數目和正方形的邊長,資料用空格隔開。
接下來n行,每行輸入一組資料,每組資料報括三個整數xi,yi,wi,分別代表目標的x座標,y座標和價值,資料用空格隔開。
輸出格式
輸出乙個正整數,代表一顆炸彈最多能炸掉地圖上目標的總價值數目。
資料範圍
0≤r≤109
02 1
0 0 1
1 1 1
輸出樣例:
#include
using
namespace std;
int f[
5010][
5010];
intmain()
for(
int i=
1;i<=m;i++
)for
(int j=
1;j<=n;j++
) f[i]
[j]+
=f[i-1]
[j]+f[i]
[j-1
]-f[i-1]
[j-1];
for(
int i=r;i<=m;i++
)for
(int j=r;j<=n;j++
) sum=
max(sum,f[i]
[j]-f[i-r]
[j]-f[i]
[j-r]
+f[i-r]
[j-r]);
cout<
}
標籤字首和題目解析求矩陣中固定長度矩陣的最大值
思路
計算矩陣中每個點的方法
有 n 頭牛站成一行,被編隊為1、2、3…n,每頭牛的身高都為整數。
當且僅當兩頭牛中間的牛身高都比它們矮時,兩頭牛方可看到對方。
現在,我們只知道其中最高的牛是第 p 頭,它的身高是 h ,剩餘牛的身高未知。
但是,我們還知道這群牛之中存在著 m 對關係,每對關係都指明了某兩頭牛 a 和 b 可以相互看見。
求每頭牛的身高的最大可能值是多少。
輸入格式
第一行輸入整數n,p,h,m,資料用空格隔開。
接下來m行,每行輸出兩個整數 a 和 b ,代表牛 a 和牛 b 可以相互看見,資料用空格隔開。
輸出格式
一共輸出 n 行資料,每行輸出乙個整數。
第 i 行輸出的整數代表第 i 頭牛可能的最大身高。
資料範圍
1≤n≤10000,
1≤h≤1000000,
1≤a,b≤10000,
0≤m≤10000
輸入樣例:
9 3 5 5輸出樣例:1 35 3
4 33 7
9 8
5453445
55
#include
using
namespace std;
int height[
100]
;int
main()
)));
height[a+1]
--,height[b]++;
}}for(
int i=
1;i<=n;i++
)}
標籤差分思路每乙個數與前乙個數的差值為差分
只可能出現巢狀不可能出現交叉,每次出現一對關係,都將這對關係中的數減1
字首和與差分
數列的字首和 sum i 表示a 1 a i 的和 用處1 求i j的和sum j sum i 1 用處2 區間修改。設定乙個change陣列。當區間 i,j 上要加k時,我們令change i k,令change j 1 k。如果我們對change陣列求字首和的話,字首和sum change i ...
字首和與差分
從陣列第乙個開始累加 s i s i 1 a i 求區間 l,r 的和,o 1 複雜度sum s r s l 1 遞推s i j s i j s i 1 j s i j 1 s i 1 j 1 例題 雷射炸彈一種新型的雷射炸彈,可以摧毀乙個邊長為r的正方形內的所有的目標。現在地圖上有n n 1000...
字首和與差分
例題入口 include const int n 320 int a n n a i 1 a i 0 1.對a 求出平方數 將其值置為1 不是平方數就是0 2.對a求乙個字首和 3.對 a,b 求乙個部分和 int sum n n void init for int i 1 i 100000 i i...