晚餐佇列安排 (麻煩的聚餐)

2021-10-09 06:44:44 字數 1186 閱讀 1692

為了避免餐廳過分擁擠,fj要求奶牛們分 33 批就餐。每天晚飯前,奶牛們都會在餐廳前排隊入內,按fj的設想,所有第 33 批就餐的奶牛排在隊尾,隊伍的 前端由設定為第1批就餐的奶牛佔據,中間的位置就歸第 22 批就餐的奶牛了。由於奶牛們不理解fj的安排,晚飯前的排隊成了乙個**煩。

第 ii 頭奶牛有一張標明她用餐批次 d_i(1 \le d_i \le 3)di​

(1≤di​

≤3) 的卡片。雖然所有 n(1 \le n \le 30000)n(1≤n≤30000) 頭奶牛排成了很整齊的隊伍,但誰都看得出來,卡片上的號碼是完全雜亂無章的。

在若干次混亂的重新排隊後,fj找到了一種簡單些的方法:奶牛們不動,他沿著隊伍從頭到尾走一遍,把那些他認為排錯隊的奶牛卡片上的編號改 掉,最終得到乙個他想要的每個組中的奶牛都站在一起的佇列,例如111222333或者333222111。哦,你也發現了,fj不反對一條前後顛倒的隊 列,那樣他可以讓所有奶牛向後轉,然後按正常順序進入餐廳。

你也曉得,fj是個很懶的人。他想知道,如果他想達到目的,那麼他最少得改多少頭奶牛卡片上的編號。所有奶牛在fj改卡片編號的時候,都不會挪位置。

第 11 行: 11 個整數:nn

第 2 \dots n+12…n+1 行: 第 i+1i+1 行是 11 個整數,為第i頭奶牛的用餐批次 d_idi​

第 11 行: 輸出 11 個整數,為fj最少要改幾頭奶牛卡片上的編號,才能讓編號變成他設想中的樣子

首先我們先打輸入基本**,這裡省略。

#include

using

namespace std;

int n,ans,sum;

int a[

100010

],f[

100010

],tmp[

100010];

intmain()

for(

int i=

1;i<=n;i++

) ans=

max(ans,f[i]);

}}for(

int i=

1;i<=n;i++

) sum=

max(sum,tmp[i]);

}}printf

("%d"

,n-max

(ans,sum));

return0;

}

晚餐佇列安排

時限 1000ms 記憶體限制 65536k 總時限 3000ms 描述 為了避免餐廳過分擁擠,fj要求奶牛們分2批就餐。每天晚飯前,奶牛們都 會在餐廳前排隊入內,按fj的設想,所有第2批就餐的奶牛排在隊尾,隊伍的前 半部分則由設定為第1批就餐的奶牛佔據。由於奶牛們不理解fj的安排,晚飯前 的排隊成...

晚餐佇列安排

時間限制 1 sec 記憶體限制 64 mb 為了避免餐廳過分擁擠,fj要求奶牛們分2批就餐。每天晚飯前,奶牛們都會在餐廳前排隊入內,按fj的設想,所有第2批就餐的奶牛排在隊尾,隊伍的前半部分則由設定為第1批就餐的奶牛佔據。由於奶牛們不理解fj的安排,晚飯前的排隊成了乙個 煩。第i頭奶牛有一張標明她...

P2837 晚餐佇列安排

此題可能用動規不太好做,主要是狀態轉移方程很難想個人認為,思維發散的大佬們忽視。我看了這位大佬的 dp 題解後才想到了方程,在此受我一膜 嗯,說下思路 先用 a i 陣列存一下輸入的編號 然後用二維陣列 dp i 0 1 來表示當前第 i 頭奶牛的編號改成 1 或 2 所用的最少次數 0 表示改成 ...