題目描述
為了避免餐廳過分擁擠,fj要求奶牛們分2批就餐。每天晚飯前,奶牛們都會在餐廳前排隊入內,按fj的設想,所有第2批就餐的奶牛排在隊尾,隊伍的前半部分則由設定為第1批就餐的奶牛佔據。由於奶牛們不理解fj的安排,晚飯前的排隊成了乙個**煩。 第i頭奶牛有一張標明她用餐批次d_i(1 <= d_i <= 2)的卡片。雖然所有n頭奶牛排成了很整齊的隊伍,但誰都看得出來,卡片上的號碼是完全雜亂無章的。 在若干次混亂的重新排隊後,fj找到了一種簡單些的方法:奶牛們不動,他沿著隊伍從頭到尾走一遍,把那些他認為排錯隊的奶牛卡片上的編號改掉,最終得到乙個他想要的每個組中的奶牛都站在一起的佇列,例如112222或111122。有的時候,fj會把整個佇列弄得只有1組奶牛(比方說,1111或222)。 你也曉得,fj是個很懶的人。他想知道,如果他想達到目的,那麼他最少得改多少頭奶牛卡片上的編號。所有奶牛在fj改卡片編號的時候,都不會挪位置。
輸入格式
第1行: 1個整數:n * 第2…n+1行: 第i+1行是1個整數,為第i頭奶牛的用餐批次d_i
輸出格式
一行: 輸出1個整數,為fj最少要改幾頭奶牛卡片上的編號,才能讓編號變成他設想中的樣子。
dp[i][j] 表示 i 位置的奶牛 改為 j 編號的最少花費;
可以推的,當 i 位置的奶牛編號為 1 時:
dp[i][0]=dp[i-1][0]; 表示不變
dp[i][1]=min(dp[i-1][0],dp[i-1][1])+1; 表示編號改為 2
當編號為 2 時同理;
**:
#include
#define ll long long
#define pa pair
#define lson k<<1
#define rson k<<1|1
#define inf 0x3f3f3f3f
//ios::sync_with_stdio(false);
using
namespace std;
const
int n=
100100
;const
int m=
4001000
;const ll mod=
998244353
;int d[
30100];
int dp[
30100][
2];int
main()
else
} cout<<
min(dp[n][1
],dp[n][0
])
}
洛谷 P2365 任務安排 (線性dp)
3月14日第二題!題目描述 n個任務排成乙個序列在一台機器上等待完成 順序不得改變 這n個任務被分成若干批,每批包含相鄰的若干任務。從時刻0開始,這些任務被分批加工,第i個任務單獨完成所需的時間是ti。在每批任務開始前,機器需要啟動時間s,而完成這批任務所需的時間是各個任務需要時間的總和 同一批任務...
洛谷 P2365 任務安排 (線性dp)
3月14日第二題!題目描述 n個任務排成乙個序列在一台機器上等待完成 順序不得改變 這n個任務被分成若干批,每批包含相鄰的若干任務。從時刻0開始,這些任務被分批加工,第i個任務單獨完成所需的時間是ti。在每批任務開始前,機器需要啟動時間s,而完成這批任務所需的時間是各個任務需要時間的總和 同一批任務...
洛谷 P2365 任務安排 (線性dp)
3月14日第二題!題目描述 n個任務排成乙個序列在一台機器上等待完成 順序不得改變 這n個任務被分成若干批,每批包含相鄰的若干任務。從時刻0開始,這些任務被分批加工,第i個任務單獨完成所需的時間是ti。在每批任務開始前,機器需要啟動時間s,而完成這批任務所需的時間是各個任務需要時間的總和 同一批任務...