題目描述
神牛有很多…當然…每個同學都有自己衷心膜拜的神牛.
某學校有兩位神牛,神牛甲和神牛乙。新入學的 n 位同學們早已耳聞他們的神話。
所以,已經衷心地膜拜其中一位了。現在,老師要給他們分機房。但是,要麼保證整個機房都是同一位神牛的膜拜者,或者兩個神牛的膜拜者人數差不超過 m。另外,現在 n 位同學排成一排,老師只會把連續一段的同學分進乙個機房。老師想知道,至少需要多少個機房。
輸入格式
輸入檔案第一行包含兩個整數 n 和 m。
第 2 到第 (n+1) 行,每行乙個非 1 即 2 的整數,第 (i+1) 行的整數表示第 i 個同學崇拜的物件,1 表示甲,2 表示乙。
輸出格式
輸出乙個整數,表示最小需要機房的數量。
把2變為-1,則題目可以轉化為:把長為n的串分為連續的幾段,每段的和絕對值<=m,求最小段數;
狀態轉移方程為:dp[i]=min(dp[j]+1,dp[i]),j 為 i 的前面位置,保證 j 到 i 的這部分和絕對值<=m,複雜度為n^2;
**:
#include
#define ll long long
#define pa pair
#define ls k<<1
#define rs k<<1|1
#define inf 0x3f3f3f3f
using
namespace std;
const
int n=
3000
;const
int m=
2000100
;const
int mod=
1e9;
int sum[n]
,a[n]
,dp[n]
;int
main()
for(
int i=
1;i<=n;i++)}
cout<
}
洛谷 題解 P1564 膜拜
先分析題目,是個很明顯的dp問題。很容易我們就可以想到dp i 表示對於前i個人的最少分配的機房數。下面我們開始找動態轉移方程。再仔細讀一遍題,老師只會把連續一段的同學分進乙個機房。這樣就簡單了。因為老師只會把連續一段的同學分進乙個機房,那麼對於第i位同學,我們就可以查驗第j位同學,是否能夠使得j ...
P1564 膜拜(洛谷) 動態規劃
p1564 膜拜 這一題使用遞迴求解,考慮乙個區間 i,j 若從i到j可分在乙個機房,則直接返回,否則,遍歷每乙個點k,若 i,k 可分在乙個機房,則求 k 1,j 分組的數目最小值。求解過程中,已求的區間會被儲存起來。這裡固定n include include include define siz...
洛谷 P1970 花匠 線性dp
花匠棟棟種了一排花,每株花都有自己的高度。花兒越長越大,也越來越擠。棟棟決定把這排中的一部分花移走,將剩下的留在原地,使得剩下的花能有空間長大,同時,棟棟希望剩下的花排列得比較別緻。具體而言,棟棟的花的高度可以看成一列整數h 1,h 2,h nh1 h2 hn 設當一部分花被移走後,剩下的花的高度依...