1. 程式人生 > 其它 >51nod 2498 任務排程器

51nod 2498 任務排程器

http://www.51nod.com/Challenge/Problem.html#problemId=2498

一開始貪心模擬過了,題解的思路比較好

設出現次數最多的任務出現了k次

因為冷卻時間為n,我們稱每n+1個任務為一輪

那麼至少要執行k輪

如果除去一個出現次數最多的任務,剩下的任務能夠把前k-1輪的剩餘n*(k-1)個位置填滿,那就可以沒有每個時間都執行一個任務,即完成任務所需時間為任務總數

如果不能填滿,前k-1輪每輪所需時間n+1不變,最後一輪就是出現次數為k的任務總數,每個需要1的時間

#include<bits/stdc++.h>

using namespace
std; char s[10005]; int sum[31],last[31]; int main() { int m,n; scanf("%d",&m); scanf("%s",s+1); scanf("%d",&n); for(int i=1;i<=m;++i) sum[s[i]-'A'+1]++; int mx=0; for(int i=1;i<=26;++i) mx=max(mx,sum[i]); if(m-mx>=n*(mx-1)) printf("%d",m); else {
int x=0; for(int i=1;i<=26;++i) if(sum[i]==mx) ++x; printf("%d",(mx-1)*(n+1)+x); } }
作者:xxy 出處:http://www.cnblogs.com/TheRoadToTheGold/ 本文版權歸作者和部落格園共有,轉載請用連結,請勿原文轉載,Thanks♪(・ω・)ノ。