為了避免餐廳過分擁擠,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 表示改成 ...