日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

3369 膜拜

發布時間:2023/12/18 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 3369 膜拜 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述?Description

神牛有很多…當然…每個同學都有自己衷心膜拜的神牛.
某學校有兩位神牛,神牛甲和神牛乙。新入學的N位同學們早已耳聞他們的神話。所以,已經衷心地膜拜其中一位了。
現在,老師要給他們分機房。
但是,要么保證整個機房都是同一位神牛的膜拜者,或者兩個神牛的膜拜者人數差不超過M。
另外,現在N位同學排成一排,老師只會把連續一段的同學分進一個機房。老師想知道,至少需要多少個機房。

輸入描述?Input Description

輸入文件第一行包括N和M。
之后N行,每行一個整數,1表示神牛甲的崇拜者,2表示神牛乙的崇拜者。

輸出描述?Output Description

輸出一個整數,表示最小需要機房的數量。

樣例輸入?Sample Input

5 1?
2?
2 ?
1?
2?
2

樣例輸出?Sample Output

2

數據范圍及提示?Data Size & Hint

對于30%的數據,有1≤N,M≤50;

對于100%的數據,有1≤N,M≤2500



分析:假設一共有n個人,那么要使所分得房間最少,那么從最后人一個開始,試圖找出一個最長的可合并的序列,則找到后需要的房間數目為 這段序列需要的一間房子 和 剩余人數所需要的房子,假設其值為 ?1 + fs ?,則最后n個人所需房子的最小值 f[n] = min(1+fs,f[n]) ,根據此思路遞推求解即可。

序列可合并的情況包括 人數差小于 m,及某個序列由同一位神牛的崇拜者組成。

代碼如下:

#include <iostream> #include <cmath> using namespace std; int N,M; int f[3001]; int p[3001]; int main() {int s1 = 0,s2 = 0;for (int i = 1; i <= 3000; i++){f[i] = 3001;}cin >> N >> M;for (int i = 1; i <= N; i++){cin >> p[i];}for (int i = 1; i <= N; i++){s1 = s2 = 0;int minfj = 3001;for (int j = i; j >= 1; j--){if (p[j] == 1)s1++;elses2++;if (s1 == 0 || s2 == 0 || abs(s1 - s2) <= M){minfj = min(minfj,f[j-1]+1);}}f[i] = min(f[i],minfj);}cout<<f[N];return 0; }

總結

以上是生活随笔為你收集整理的3369 膜拜的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。