P2085 最小函数值 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
#include<iostream>
#include<queue>
#include<algorithm>
#include<vector>
#include<cstring>
using namespace std;
#define ll long long
const int N=1e4+100;
int n,m;
struct node{
int a,b,c;
}f[N];
int main()
{
scanf("%d%d",&n,&m);
priority_queue<int,vector<int>,less<int> >q;
for(int i=1;i<=n;i++)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
f[i]={a,b,c};
}
for(int i=1;i<=n;i++)
{
for(int x=1;x<=m;x++)//枚举每组数计算1到m次后的函数值并存入堆
{
int y=f[i].a*x*x+f[i].b*x+f[i].c;
if(i==1)//把第一组的计算出的值先全部存入
q.push(y);
else
{
if (y < q.top())//当前计算出的函数值小于堆顶的时候
{
q.pop();
q.push(y);
}
}
}
}
vector<int>v;//处理输出的顺序(从小到大)
while(m--)
{
v.push_back(q.top());
q.pop();
}
reverse(v.begin(),v.end());
for(auto i:v)
printf("%d ",i);
return 0;
}