Codeforces 854C Planning(贪心+堆)
Posted Sakits
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces 854C Planning(贪心+堆)相关的知识,希望对你有一定的参考价值。
贪心:让代价大的尽量移到靠前的位置。
做法:先让前k个数加进堆里,枚举k+1~n+k,每次把新元素加进堆后找到最大代价放在当前位置即可。
#include<bits/stdc++.h> #define ll long long using namespace std; const int maxn=500010; struct poi{int c,pos;}; priority_queue<poi>q; bool operator<(poi a,poi b){return a.c<b.c;} int n,k; int a[maxn],ansi[maxn]; ll ans; void read(int &k) { int f=1;k=0;char c=getchar(); while(c<‘0‘||c>‘9‘)c==‘-‘&&(f=-1),c=getchar(); while(c<=‘9‘&&c>=‘0‘)k=k*10+c-‘0‘,c=getchar(); k*=f; } int main() { read(n);read(k); for(int i=1;i<=n;i++)read(a[i]); for(int i=1;i<=k;i++)q.push((poi){a[i],i}); for(int i=k+1;i<=n+k;i++) { if(i<=n)q.push((poi){a[i],i}); poi t=q.top();q.pop(); ans+=1ll*t.c*(i-t.pos); ansi[t.pos]=i; } printf("%I64d\n",ans); for(int i=1;i<=n;i++)printf("%d ",ansi[i]); }
以上是关于Codeforces 854C Planning(贪心+堆)的主要内容,如果未能解决你的问题,请参考以下文章
CodeForces - 853A Planning (优先队列,贪心)
Codeforces 854 C Planning 贪心 最大堆
Codeforces - 1321B - Journey Planning(思维)
Codeforces Round #433 (Div. 2, based on Olympiad of Metropolises) C. Planning