ALGO 基礎演算法 2

2021-10-08 11:34:22 字數 2841 閱讀 6629

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

1​b2

​=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 ...