陶陶摘
蘋果陶陶摘蘋果
陶陶摘蘋果
on問題轉化: 數軸上
有若干點
,從m個
固定區間
中選出k
個,要求
覆蓋點數
最多.數軸上有若干點, 從m個固定區間中選出k個, 要求覆蓋點數最多.
數軸上有若干
點,從m
個固定區
間中選出
k個,要
求覆蓋點
數最多.
然後排序進行 dpdp
dp,f[i
,j]f[i,j]
f[i,j]
表示第 i
ii 個區間作為選出的 j
jj 個區間中的最後乙個時, 覆蓋的最大點數.
則 f [i
,j]=
maxf[i, j] = max\
f[i,j]
=max
.時間複雜度 o(m
3)o(m^3)
o(m3
) .
注意狀態的初始化和繼承,繼承不要在決策途中進行.cod
e\mathcal
code
#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;
}
陶陶 摘蘋果 動態規劃
陶陶摘 蘋果陶陶 摘蘋果 desc ript iond escr ipti onso luti onso luti on問題轉化 數軸上 有若干點 從m個 固定區間 中選出k 個,要求 覆蓋點數 最多.數 軸上有若 幹點,從 m個固定 區間中選 出k個,要求覆蓋 點數最多 然後排序進行 dpd p,...
陶陶摘蘋果
試題描述 陶陶家的院子裡有一棵蘋果樹,每到秋天樹上就會結出10個蘋果。蘋果成熟的時候,陶陶就會跑去摘蘋果。陶陶有個30厘公尺高的板凳,當她不能直接用手摘到蘋果的時候,就會踩到板凳上再試試。現在已知10個蘋果到地面的高度,以及陶陶把手伸直的時候能夠達到的最大高度,請幫陶陶算一下她能夠摘到的蘋果的數目。...
陶陶摘蘋果
陶陶家的院子裡有一棵蘋果樹,每到秋天樹上就會結出10個蘋果。蘋果成熟的時候,陶陶就會跑去摘蘋果。陶陶有個30厘公尺高的板凳,當她不能直接用手摘到蘋果的時候,就會踩到板凳上再試試。現在已知10個蘋果到地面的高度,以及陶陶把手伸直的時候能夠達到的最大高度,請幫陶陶算一下她能夠摘到的蘋果的數目。假設她碰到...