题目描述
node-->(int ans,int a,int b,int c,int x);函数值,系数a,b,c,变量值
priority_queue<node> q;
由于所有函数在x>0都是单调递增的,所有首先将所有函数的最小值(当x=1)时的函数值放入堆中,
取出当前堆中最小的元素,然后将该函数的小一个最小元素放入堆中,依次去m次最小元素
const operator <(const node &n)const {
return ans>n.ans; //小根堆,
}
算法1
C++ 代码
#include<iostream>
#include<queue>
using namespace std;
int n,m;
struct node{
int ans,a,b,c,x;
bool operator <(const node &n) const{
return ans>n.ans;
}
};
priority_queue<node> q;
int f(int a,int b,int c,int x){
return a*x*x+b*x+c;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
int a,b,c;
cin>>a>>b>>c;
int x=1;
q.push({f(a,b,c,x),a,b,c,x});
}
while(m--){
node t=q.top();q.pop();
//将该函数的下一个值入堆
q.push({f(t.a,t.b,t.c,t.x+1),t.a,t.b,t.c,t.x+1});
cout<<t.ans<<" ";
}
return 0;
}
有种bfs的感觉
秀