
思路:
我们考虑贪心,一列一列加,如果不够空间了,就考虑去掉最小的那一列
codecodecode
#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
long long ans, n, m, k, tmp, sum;
priority_queue<long long> q;
int main()
{
scanf("%lld%lld%lld", &n, &m, &k);
for(long long i=1; i<=m; i++)
{
long long x, maxx=0;
scanf("%lld", &x);
if(n==1)
{
if(i>k)
continue;
ans+=x;
continue;
}
q.push(-x);
tmp+=n, sum+=n*x;
while(tmp>k&&!q.empty())
{
long long y=-q.top();
q.pop();
tmp-=n-1;
sum-=(n-1)*y;
maxx=max(maxx, y);
}
ans=max(ans, sum+min(n, k-tmp)*maxx);
if(k<=i)
break;
}
printf("%lld", ans);
return 0;
}

本文介绍了如何解决YBTOJ中的选数游戏问题,采用贪心算法,按列依次选取数字,当空间不足时通过移除最小列进行优化。文章详细阐述了实现过程并提供了C++代码示例。

236

被折叠的 条评论
为什么被折叠?



