最少攔截系統(dp)

2021-10-24 22:15:38 字數 1698 閱讀 8702

題目傳送門

最少攔截系統

某國為了防禦敵國的飛彈襲擊,發展出一種飛彈攔截系統.但是這種飛彈攔截系統有乙個缺陷:雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能超過前一發的高度.某天,雷達捕捉到敵國的飛彈來襲.由於該系統還在試用階段,所以只有一套系統,因此有可能不能攔截所有的飛彈.

怎麼辦呢?多搞幾套系統唄!你說說倒蠻容易,成本呢?成本是個大問題啊.所以俺就到這裡來求救了,請幫助計算一下最少需要多少套攔截系統.

逆向思維的最長上公升子串行

d p[

i]

dp[i]

dp[i

]代表到達第i

ii位時,需要的系統的最小值

轉移方程為dp[

i]=m

ax(d

p[i]

,dp[

j]+1

)whe

na[j

]

i]

dp[i]=max(dp[i], dp[j]+1)\ when\ a[j]dp

[i]=

max(

dp[i

],dp

[j]+

1)wh

ena[

j]i]

即為後面的飛彈高於前面的某個飛彈的高度的時候即增加乙個系統,最大值即為在前面已有的系統的最大值上是否增加

#pragma gcc optimize("-ofast","-funroll-all-loops")

#include

#include

#include

#include

#include

using namespace std;

#define endl '\n'

#define inf 0x3f3f3f3f

#define int long long

#define debug(a) cout<<#a<<"="typedef

long

long ll;

const

double pi=

acos(-

1.0)

;const

double e=

exp(

1.0)

;const

int m=

1e9+7;

const

int n=

3e4+7;

inline

intmymax

(int x,

int y)

inline

intmymin

(int x,

int y)

inline

intread()

inline

void

write

(register

int x)

if(x >9)

write

(x/10);

putchar

(x %10+

'0');}

int n, a[n]

, dp[n]

;void

solve()

write

(ans)

;putchar

('\n');

}return;}

signed

main()

最少攔截系統(dp)

problem description 某國為了防禦敵國的飛彈襲擊,發展出一種飛彈攔截系統.但是這種飛彈攔截系統有乙個缺陷 雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能超過前一發的高度.某天,雷達捕捉到敵國的飛彈來襲.由於該系統還在試用階段,所以只有一套系統,因此有可能不能攔截所有...

最少攔截系統 基礎DP

kuangbin帶你飛 專題十二 基礎dp1 某國為了防禦敵國的飛彈襲擊,發展出一種飛彈攔截系統.但是這種飛彈攔截系統有乙個缺陷 雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能超過前一發的高度.某天,雷達捕捉到敵國的飛彈來襲.由於該系統還在試用階段,所以只有一套系統,因此有可能不能攔...

最少攔截系統(基礎DP)

某國為了防禦敵國的飛彈襲擊,發展出一種飛彈攔截系統.但是這種飛彈攔截系統有乙個缺陷 雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能超過前一發的高度.某天,雷達捕捉到敵國的飛彈來襲.由於該系統還在試用階段,所以只有一套系統,因此有可能不能攔截所有的飛彈.怎麼辦呢?多搞幾套系統唄 你說說...