1376
最小函数值
题目描述
有n个函数,分别为F1,F2,...,Fn。定义Fi(x)=Ai*x2+Bi*x+Ci(x∈N∗)。给定这些Ai、Bi和Ci,请求出所有函数的所有函数值中最小的m个(如有重复的要输出多个)。
输入
第一行输入两个正整数n和m。
以下n行每行三个正整数,其中第ii行的三个数分别位Ai、Bi和Ci。输入数据保证Ai≤10,Bi≤100,Ci≤10000。
输出
将这n个函数所有可以生成的函数值排序后的前m个元素。这m个数应该输出到一行,用空格隔开。
样例输入1
3 10
4 5 3
3 4 5
1 7 1
样例输出1
9 12 12 19 25 29 31 44 45 54
提示/说明
n,m<=10000
标签
普及+/提高 其他 优先队列
暴力法
一个一个算函数值
#include<bits/stdc++.h>
using namespace std;
int main(){
int minn=0x3f3f3f;//十六进制数,十进制测试点过不去!
int a[10005], b[10005], c[10005], x[10005];
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++){
cin>>a[i]>>b[i]>>c[i];
x[i]=1;
}
for(int i=0;i<m;i++){
int min1=minn,ans;//如果没有 min1=minn那么minn的值就会随着遍历而改变,有了 min1=minn就不会了
for(int j=0;j<n;j++){
int ls=a[j]*x[j]*x[j]+b[j]*x[j]+c[j];
if(ls<min1){
min1=ls;
ans=j;
}
}
cout<<min1<<" ";
x[ans]++;
}
return 0;
}