经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C++ » 查看文章
洛谷 P2085 最小函数值
来源:cnblogs  作者:yu__xuan  时间:2019/8/5 10:20:16  对本文有异议

题目

思路

首先这些函数全部单带递增,因为$a$,$b$,$c$都是正整数。
我们将全部的函数的$x$为$1$时的函数值放入优先度列(小根堆),然后输出并弹出堆顶元素,将该函数的$x++$再将函数值放入优先队列。

$Code$

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<string>
  5. #include<queue>
  6. #include<algorithm>
  7. #define MAXN 10001
  8. using namespace std;
  9. int n,m;
  10. int a[MAXN],b[MAXN],c[MAXN];
  11. struct info{
  12. int num,now,w;
  13. bool operator > (const info xx) const{
  14. return w>xx.w;
  15. }
  16. }fff[MAXN];
  17. priority_queue<info,vector<info>,greater<info> > q;
  18. inline int read(){
  19. int x=0;bool f=0;char c=getchar();
  20. while(c<'0'||c>'9'){if(c=='-')f=!f;c=getchar();}
  21. while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
  22. return f?-x:x;
  23. }
  24. int main(){
  25. n=read(),m=read();
  26. for(int i=1;i<=n;++i){
  27. a[i]=read(),b[i]=read(),c[i]=read();
  28. }
  29. for(int i=1;i<=n;++i){
  30. fff[i].now=1,fff[i].num=i;
  31. fff[i].w=a[i]+b[i]+c[i];
  32. q.push(fff[i]);
  33. }
  34. while(m--){
  35. info temp=q.top();
  36. printf("%d ",temp.w);
  37. q.pop();
  38. temp.now++;
  39. temp.w=(a[temp.num]*temp.now*temp.now)+(b[temp.num]*temp.now)+c[temp.num];
  40. q.push(temp);
  41. }
  42. puts("");
  43. return 0;
  44. }

原文链接:http://www.cnblogs.com/poi-bolg-poi/p/11289097.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号