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
本文版权归作者和博客园共有,转载请用链接,请勿原文转载,Thanks♪(・ω・)ノ。
原文地址:https://www.cnblogs.com/TheRoadToTheGold/p/15131118.html