陶陶摘
蘋果陶陶
摘蘋果
desc
ript
iond
escr
ipti
onso
luti
onso
luti
on問題轉化: 數軸上
有若干點
,從m個
固定區間
中選出k
個,要求
覆蓋點數
最多.數
軸上有若
幹點,從
m個固定
區間中選
出k個,
要求覆蓋
點數最多
.然後排序進行 dpd
p,f[
i,j]
f[i,
j]表示第 i
i 個區間作為選出的 j
j 個區間中的最後乙個時, 覆蓋的最大點數.
則 f[i,
j]=m
axf[
i,j]
=max
.時間複雜度 o(m
3)o(
m3) .
注意狀態的初始化和繼承,繼承不要在決策途中進行.cod
ecod
e
#include
#define reg register
const
int maxn =
1000005
;const
int maxn_2 =
205;
//}}
struct inte p[maxn]
, t[maxn]
;bool
cmp(inte a, inte b)
intmain()
for(reg int i =
1; i <= m; i ++
)scanf
("%d%d"
,&p[i]
.l,&p[i]
.r);
for(reg int i =
1; i < maxn; i ++
) sum[i]
+= sum[i-1]
; std::
sort
(p+1
, p+m+
1, cmp)
;for
(reg int i =
1; i <= m; i ++)
k = std::
min(k, cnt)
;for
(reg int j =
1; j <= k; j ++
)for
(reg int i =
1; i <= cnt; i ++
)for
(reg int k =
0; k < i; k ++
) f[i]
[j]= std::
max(f[i]
[j], f[k]
[j-1
]+ sum[t[i]
.r]- sum[std::
max(t[k]
.r, t[i]
.l-1)]
);for(reg int i =
1; i <= cnt; i ++
) ans = std::
max(ans, f[i]
[k])
;printf
("%d\n"
, ans + flag)
;return0;
}
陶陶 摘蘋果 動態規劃
陶陶摘 蘋果陶陶摘蘋果 陶陶摘蘋果 on問題轉化 數軸上 有若干點 從m個 固定區間 中選出k 個,要求 覆蓋點數 最多.數軸上有若干點,從m個固定區間中選出k個,要求覆蓋點數最多.數軸上有若干 點,從m 個固定區 間中選出 k個,要 求覆蓋點 數最多.然後排序進行 dpdp dp,f i j f ...
陶陶摘蘋果
試題描述 陶陶家的院子裡有一棵蘋果樹,每到秋天樹上就會結出10個蘋果。蘋果成熟的時候,陶陶就會跑去摘蘋果。陶陶有個30厘公尺高的板凳,當她不能直接用手摘到蘋果的時候,就會踩到板凳上再試試。現在已知10個蘋果到地面的高度,以及陶陶把手伸直的時候能夠達到的最大高度,請幫陶陶算一下她能夠摘到的蘋果的數目。...
陶陶摘蘋果
陶陶家的院子裡有一棵蘋果樹,每到秋天樹上就會結出10個蘋果。蘋果成熟的時候,陶陶就會跑去摘蘋果。陶陶有個30厘公尺高的板凳,當她不能直接用手摘到蘋果的時候,就會踩到板凳上再試試。現在已知10個蘋果到地面的高度,以及陶陶把手伸直的時候能夠達到的最大高度,請幫陶陶算一下她能夠摘到的蘋果的數目。假設她碰到...