codeforces上一道贪心算法题

简介:

贪心算法:

STL优先队列实现最大堆,最小堆

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include<iostream>
#include<queue>
using  namespace  std;
const  int  MAX=1001;
int  a[MAX];
int  calPrize( int  n,  int  x)
{
     int  start=n-x+1;
     return  (start+n)*x/2;
}
int  fun( int  n,  int  m,  int  pos[])
{
     priority_queue< int ,vector< int >,greater< int > >heap; //最小堆
     priority_queue< int ,vector< int >,less< int > >heap2; //最大堆
     for ( int  i=0;i<m;i++)
     {
             heap.push(pos[i]);
             heap2.push(pos[i]);
     }
     int  ret1=0,ret2=0;
     for ( int  i=0;i<n;i++)
     {
             int  tmp=heap.top();
             ret1+=tmp;
             heap.pop();
             if (tmp>1)
             heap.push(tmp-1);
             tmp=heap2.top();
             ret2+=tmp;
             heap2.pop();
             if (tmp>1)
             heap2.push(tmp-1);
     }
     cout<<ret2<< " " <<ret1<<endl;
     
}
int  main()
{
     int  n, m;
     cin>>n>>m;
     for ( int  i=0;i<m;i++)
             cin>>a[i];
     fun(n,m,a);
     //cin>>m;
}

本文转自博客园知识天地的博客,原文链接:codeforces上一道贪心算法题,如需转载请自行联系原博主。

相关文章
|
8月前
codeforces 272C. Dima and Staircase(线段树)
题目很长,看加猜加谷歌翻译才看懂了题目。每级台阶的宽都是1,但高不同,并且告诉你了,然后给你m个箱子,长和宽都告诉你,把箱子靠左放,求箱子的底部有多高。
22 0
|
5天前
|
机器学习/深度学习 算法 C++
【洛谷 P2240】【深基12.例1】部分背包问题 题解(贪心算法)
**深基12.例1**是部分背包问题,$N$堆金币,每堆$(m_i, v_i)$,$T$承重限制。按金币单价降序装包,保证价值最大化。输入$N,T$及每堆金币详情,输出两位小数的最大价值。示例:输入$4,50$,输出$240.00$。AC代码使用C++,通过排序和迭代实现。
20 0
|
10月前
|
存储 算法
每日一题,贪心算法的简单应用
每日一题,贪心算法的简单应用
|
人工智能 算法 测试技术
LeetCode 双周赛 101,DP / 中位数贪心 / 裴蜀定理 / Dijkstra / 最小环
这周比较忙,上周末的双周赛题解现在才更新,虽迟但到哈。上周末这场是 LeetCode 第 101 场双周赛,整体有点难度,第 3 题似乎比第 4 题还难一些。
73 0
|
人工智能
codeforces455——A. Boredom(线性DP)
codeforces455——A. Boredom(线性DP)
105 0
codeforces455——A. Boredom(线性DP)
HDU7018.Banzhuan(计算几何+贪心)
HDU7018.Banzhuan(计算几何+贪心)
88 0
HDU7018.Banzhuan(计算几何+贪心)