acw 100. 增減序列
題目鏈結
地圖上有n
nn 個目標,用整數xi,
yi
x_i,y_i
xi,yi
表示目標在地圖上的位置,每個目標都有乙個價值w
iw_i
wi.
注意:不同目標可能在同一位置。
現在有一種新型的雷射炸彈,可以摧毀乙個包含 r×r
r\times r
r×r個位置的正方形內的所有目標。
雷射炸彈的投放是通過衛星定位的,但其有乙個缺點,就是其**範圍,即那個正方形的邊必須和x,y
x, y
x,y軸平行。
求一顆炸彈最多能炸掉地圖上總價值為多少的目標。
炸彈的有效摧毀面積為(r−
1)×(
r−1)
(r-1)\times (r-1)
(r−1)×
(r−1
)的子矩陣,對所有子矩陣進行列舉並計算和,找到最大和值.
考慮資料範圍r
≤5000
r\leq 5000
r≤5000
,o (n
2)
\mathcal(n^2)
o(n2
)的演算法會被卡掉,因此使用二維字首和預處理後進行列舉.
#include
#include
#include
using
namespace std;
const
int n=
5005
;int s[n]
[n];
intmain()
// 二維字首和公式
for(
int i=
1; i<=
5001
;++i)
int ans=0;
// 列舉所有(r-1)*(r-1)的矩形
for(
int i=r; i<=
5001
;++i)
for(
int j=r; j<=
5001
;++j)
ans=
max(ans, s[i]
[j]-s[i-r]
[j]-s[i]
[j-r]
+s[i-r]
[j-r]);
cout
}
題目鏈結
給定乙個長度為 n
nn 的數列 a1,
a2,…
,a
na_1,a_2,…,a_n
a1,a2
,…,
an,每次可以選擇乙個區間 [l,
r]
[l,r]
[l,r
],使下標在這個區間內的數都加一或者都減一。
求至少需要多少次操作才能使數列中的所有數都一樣,並求出在保證最少次數的前提下,最終得到的數列可能有多少種。
區間操作,可以使用差分處理
構建差分序列如下
&b_1=a_1 \\ &b_2=a_2-a_1 \\ &b_3=a_3-a_2\\ &\dots\\ &b_n=a_n-a_ \end \right.
⎩⎪⎪⎪⎪⎪
⎪⎨⎪⎪
⎪⎪⎪⎪
⎧b
1=a
1b2
=a2
−a1
b3
=a3
−a2
…bn
=an
−an−
1這樣就可以將問題轉化如下
至少要操作多少次,可以使得b2∼
bn
b_2\sim b_n
b2∼bn
都為0
b
1b_1
b1有多少種取值方案
將操作分為以下四種
假設序列b
ib_i
bi中,正數的和為p
pp,負數的絕對值和為q
qq, 所以最少的運算元量為
min +
∣p−q
∣=
max
\min\+|p-q|=\max\
min+∣p
−q∣=
max可以發現,b
1b_1
b1的值收到操作2的影響,因此b
1b_1
b1的取值方案為
∣ p−
q∣+1
|p-q|+1
∣p−q∣+
1
#include
#include
#include
typedef
long
long ll;
using
namespace std;
const
int n=
1e5+5;
int n;
int a[n]
, b[n]
;int
main()
ll p=
0, q=0;
for(
int i=
2; i<=n;
++i)
if(b[i]
>
0) p+
=b[i]
;else q-
=b[i]
;
cout<<
max(p, q)
abs(p-q)+1
}
ALGO 遺傳演算法 1
遺傳演算法應用步驟 ga是一種仿生全域性優化演算法,通過選擇 selection 交叉 crossover 與變異 mutation 等機制,使得種群中個體的適應性 fitness 不斷提高.核心思想 物競天擇,適者生存 適應度函式 fitness function 稱s l s l s l為個體空...
演算法基礎題(2)
程式5 題目 利用條件運算子的巢狀來完成此題 學習成績 90分的同學用a表示,60 89分之間的用b表示,60分以下的用c表示。1.程式分析 a b a b這是條件運算子的基本例子。程式6 題目 輸入兩個正整數m和n,求其最大公約數和最小公倍數。1.程式分析 利用輾除法。程式7 題目 輸入一行字元,...
演算法基礎 遞迴2
基礎概念 演算法基礎 遞迴1 任務描述 設有集合s 生成該集合中元素的所有排列 容易想到,s的所有排列即ai s 的所有情形,這正符合遞迴形式的定義 下面先用vector傳值實現演算法 include include include using namespace std void permute ...