wls有n个二次函数Fi(x)=aix2+bix+ci(1≤i≤n)。
现在他想在且x为正整数的条件下求的最小值。
请求出这个最小值。
标签:val pop cli 函数 ima push i++ isp out
2 3
1 1 1
2 2 2
13
每次先把m当成每一份,然后先给n个,剩余的m-n就给当前增长多的那个即可.
【队友的代码】
1 #pragma GCC optimize(2) 2 #include<bits/stdc++.h> 3 using namespace std; 4 typedef long long ll; 5 6 struct node{ 7 ll a, b, c; 8 ll x, val, pri; 9 10 bool operator < ( const node & rhs )const { 11 return pri > rhs.pri ; 12 } 13 }; 14 priority_queue<node> Q; 15 int main() 16 { 17 int n, m; 18 scanf("%d%d",&n,&m); 19 for(int i=1;i<=n;i++) 20 { 21 node tmp ; 22 scanf("%lld%lld%lld",&tmp.a,&tmp.b,&tmp.c); 23 tmp.x=1; 24 tmp.pri = 2*tmp.a*tmp.x+tmp.a+tmp.b; 25 tmp.val = tmp.a*tmp.x*tmp.x+tmp.b*tmp.x+tmp.c; 26 Q.push(tmp); 27 //cout<<tmp.val<<endl; 28 } 29 for(int i=1;i<=m-n;i++) 30 { 31 node tmp=Q.top(); 32 Q.pop(); 33 tmp.x ++ ; 34 tmp.pri = 2 * tmp.a * tmp.x + tmp.a + tmp.b; 35 tmp.val = tmp.a * tmp.x * tmp.x + tmp.b * tmp.x + tmp.c; 36 Q.push(tmp); 37 38 } 39 ll Ans = 0; 40 while(!Q.empty()) 41 { 42 node tmp = Q.top(); 43 Q.pop(); 44 Ans += tmp.val; 45 } 46 printf("%lld\n",Ans); 47 48 49 return 0; 50 }
标签:val pop cli 函数 ima push i++ isp out
原文地址:https://www.cnblogs.com/Osea/p/11569218.html