原题见(https://www.luogu.org/problem/show?pid=2085)
其实这道题打暴力也能过最简单的方法可以把每个函数的函数值全部计算100个存进数组里然后排个序输出就可以啦~
其实AC的解法也就是建一个堆然后算出来值扔进去然后拿出来最小的m个数就行了~
贴代码:
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<iostream>
#include<queue>
using namespace std;
int a[10010],b[10010],c[10010];
int f[10010][10010];
inline int read(){
int num;
char ch;
while((ch=getchar())<'0' || ch>'9');
num=ch-'0';
while((ch=getchar())>='0' && ch<='9'){
num=num*10+ch-'0';
}
return num;
}
inline void out(int x){
if(x>=10){
out(x/10);
}
putchar(x%10+'0');
}
priority_queue<int> q;
int main(){
int n,m;
n=read(),m=read();
for(register int i=1;i<=n;i++){
a[i]=read(),b[i]=read(),c[i]=read();
}
int i=0;
for(register int j=1;j<=n;j++){
i++;
for(register int w=1;w<=100;w++){
f[j][w]=a[i]*w*w+b[i]*w+c[i];
q.push(-f[j][w]);//扔进去(-是为了把原来的顶最大变为顶最小)
}
}
for(register int j=1;j<=m;j++){
int tmp;
tmp=q.top();
q.pop();
out(-tmp);//恢复-号并输出
printf(" ");
}
return 0;
}