今天在學習單調佇列優化的時候發現乙個問題,就是發現好像01的狀態機問題都可以轉化成線性的dp問題,01 狀態機代表的狀態是選或不選,沒有多餘的狀態,而一般普通的dp所劃分的狀態即是選或不選,就像揹包問題,但是一些線性的dp表示的狀態是必選。
烽火台是重要的軍事防禦設施,一般建在交通要道或險要處。
一旦有軍情發生,則白天用濃煙,晚上有火光傳遞軍情。
在某兩個城市之間有 n 座烽火台,每個烽火台發出訊號都有一定的代價。
為了使情報準確傳遞,在連續 m 個烽火台中至少要有乙個發出訊號。
現在輸入 n,m 和每個烽火台的代價,請計算在兩城市之間準確傳遞情報所需花費的總代價最少為多少。
輸入格式
第一行是兩個整數 n,m,具體含義見題目描述;
第二行 n 個整數表示每個烽火台的代價 ai。
輸出格式
輸出僅乙個整數,表示最小代價。
資料範圍
1 ≤n
,m≤2
×105
1≤n,m≤2×10^5
1≤n,m≤
2×1050≤
ai
≤1000
0≤ai≤1000
0≤ai≤1
000
輸入樣例:
5 31 2 5 6 2
輸出樣例:
這道題目的話如果表示成01狀態機表示方法時,狀態表示定義是: 在前i個數中,表示選擇或者不選擇第i
個烽火的耗費最小值。
f[i][0] = min(f[i -k][1]...)
(i−
m<
k
(i - m(i
−m<
kf[i][1] = min(min(f[k][0], f[k][1])) +w[i]
我們看到這樣很麻煩, 並且有些狀態根本不合法
假設f[i][0~1]
表示點燃或者不點燃第i
個烽火台所花費的最小值,m
表示連續m
個烽火台中至少要有乙個發出訊號
f[1][0]
狀態合法的條件是必須選擇2 ~ m
其中的某些烽火,這樣就不滿足dp的無後效性,所以不能出現不選的狀態(是02告訴我要實踐才能找到問題的答案,謝謝!)。
#include
// ren zhen si kao
using
namespace std;
const
int n =
2e5+
10, inf =
1e9;
int f[n]
, q[n]
, w[n]
;int
main()
int res = inf;
for(
int i = n - m +
1; i <= n; i ++
) res =
min(res, f[i]);
cout << res << endl;
return0;
}
FPGA 狀態機的模型之Moore型狀態機
上篇博文 狀態機,fpga的靈魂,說到了狀態機的基礎知識,講到了狀態機的組成六要素,工作四要素。這篇博文來講狀態機的模型之moore狀態機,從標題也能看出,狀態機的知識並沒有結束,後面還會提到mealy型狀態機。根據狀態機的輸出與其現態 輸入之間的關係,可將fpga中的狀態機抽象為三種基本模型 mo...
FPGA 狀態機的模型之Mealy型狀態機
上篇博文講了 moore型狀態機,這篇博文和上篇博文思路一致,如果讀懂了上篇博文,這篇博文就很容易理解了。如果乙個狀態機的輸出是由現態和輸入共同決定的,那麼它就是乙個mealy型的狀態機。而按照驅動輸出的數位電路特性,又將mealy型狀態機細分為mealy 1型 mealy 2型 mealy 3型,...
狀態機 狀態機2,關於戰鬥中兵種狀態的新增狀態
但是了,但是策劃是種天生具備加需求的生物,而做為將需求變成 邏輯的程式猿來 說,只能say ok,i look 好吧,我看看 好吧,那來看看有什麼新的需求 戰鬥模組在有各種複雜的技能,技能中包含著一種控制行為的buff,稱為控制行為buff,比較常見的控制項行為buff有冰凍,眩暈,擊飛等等,以下是...