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); } }