洛谷p5665
對於每乙個斷點,最後一段的和在所有合法解中都是最小的。
顯然滿足條件的解是唯一的。構造序列 b
bb, 其中 b
ib_i
bi 表示滿足條件的解中倒數第 i
ii 段的和,並在序列 b
bb 的末尾補上無限個 000。
現在我們需要證明對於任意乙個不滿足條件的解,用同樣的方法構造出序列 c
cc,都有 ∑i=
1∞bi
2<∑i
=1∞c
i2
\sum \limits_^ b_i ^2 < \sum \limits_^ c_i^2
i=1∑∞
bi2
1∑∞
ci2
。其中已知條件是 ∑i=
1∞bi
=∑i=
1∞ci
\sum \limits_^ b_i = \sum \limits_^ c_i
i=1∑∞
bi=
i=1∑
∞ci
且 ∀i≥
1,bi
≥bi+
1,ci
≥ci+
1,∑j
=1ib
j≤∑j
=1ic
j\forall i \ge1, b_i \ge b_, c_i \ge c_, \sum \limits_^b_j \le \sum \limits_^ c_j
∀i≥1,b
i≥b
i+1
,ci
≥ci+
1,j
=1∑i
bj
≤j=1
∑ic
j。找到第乙個滿足 b
u
b_u < c_u
bu 的 u
uu,顯然 u
uu 一定存在。
由 ∑ i=
1∞bi
=∑i=
1∞ci
\sum \limits_^b_i = \sum \limits_^ c_i
i=1∑∞
bi=
i=1∑
∞ci
可知:一定可以再找到乙個 v
vv,滿足 v
>
uv > u
v>
u 且 b
v>cv
b_v > c_v
bv>cv
。由序列 b
bb 的不上公升性質可知:cu≥
cv+2
c_u \ge c_v + 2
cu≥cv
+2。
從 u
uu 開始,從左往右找到第乙個 x
xx 滿足 c
x>cx
+1
c_x > c_
cx>cx
+1;從 v
vv 開始,從右往左找到第乙個 y
yy 滿足 c
y
−1
c_y < c_
cy−1
。令 c
xc_x
cx 減一,c
yc_y
cy 加一,序列 c
cc 仍然滿足原有的性質,但平方和減小。
經過若干次這樣的調整,序列 c
cc 最終會和序列 b
bb 相同,因此序列 b
bb 對應的解一定是最優解,原命題得證。
#include
template
<
class
t>
inline
void
read
(t &res)
template
<
class
t>
inline
void
put(t x)
typedef
long
long ll;
const
int mod =
1e9;
const
int b =(1
<<30)
-1;const
int n =
4e7+5;
int x, y, z, b1, b2, m;
int n, type, l, r, p, t, w;
int que[n]
, pre[n]
;ll sum[n]
;template
<
class
t>
inline
void
ckmax
(t &x, t y)
template
<
class
t>
inline t min
(t x, t y)
struct big
inline
void
change
(ll x)
}inline
void
sqr(
)while
(gl >1&&
!g[gl -1]
)--gl;
}inline
void
operator+=
(const big &a)
inline
void
print()
}a, b;
intmain()
}else
} t =
1, w =0;
for(
int i =
1; i <= n;
++i)
que[w =1]
= x = n;
while
(x >0)
a.clear()
; a.gl =1;
for(
int i = w; i >=2;
--i)
a.print()
;return0;
}
洛谷5665 劃分(單調佇列優化DP)
點此看題面 感覺這個東西一看就很有單調性。然而去年的我在考場上並沒能想起來。不嚴謹地證一下,假設我們現在有三個塊 a,b,c 有三種可能 顯然這三種可能性代價依次遞增。也就是說,我們的決策點能右移一定右移。i 能從 j 轉移的條件是 s i s j ge s j s 其中 g j 為 j 的決策點。...
洛谷P3643 APIO2016 划艇
在首爾城中,漢江橫貫東西。在漢江的北岸,從西向東星星點點地分布著 n 個划艇學校,編號依次為 1 到 n 每個學校都擁有若干艘划艇。同一所學校的所有划艇顏色相同,不同的學校的划艇顏色互不相同。顏色相同的划艇被認為是一樣的。每個學校可以選擇派出一些划艇參加節日的慶典,也可以選擇不派出任何划艇參加。如果...
洛谷P5443 APIO2019 橋梁
apio場外選手沒事休閒做題。看了yyb的題解才把這題做出來 對操作進行分塊,把每 text 個操作分成1組,裡面大概有2類 沒被修改過的和被修改過的。接著對塊內詢問進行離線。對於沒有修改過的 我們可以直接排序然後把他們加入並查集。對於修改過的,我們看他的時間是否大於當前操作的時間,如果大於則加入原...