cf 853 A planning [贪心]
2018-02-19 15:03
316 查看
题面:
传送门
思路:
一眼看得,这是贪心【雾】
实际上,我们要求的答案就是sigma(ci*(ti-i))(i=1~n),这其中sigma(ci*i)是确定的
那么我们就要最小化sigma(ci*ti)
所以在新的每一秒,就把这一秒开始可以起飞的飞机中,cost最大的那一个拿出来,让他起飞就可以了
证明:
设最大的为m,我们取得另一个为n
那么n*ti+m*(ti+1) >= n*(ti+1)+m*ti
所以取m最好
这个过程用堆实现,懒得手打了,就用了priority_queue
Code:
传送门
思路:
一眼看得,这是贪心【雾】
实际上,我们要求的答案就是sigma(ci*(ti-i))(i=1~n),这其中sigma(ci*i)是确定的
那么我们就要最小化sigma(ci*ti)
所以在新的每一秒,就把这一秒开始可以起飞的飞机中,cost最大的那一个拿出来,让他起飞就可以了
证明:
设最大的为m,我们取得另一个为n
那么n*ti+m*(ti+1) >= n*(ti+1)+m*ti
所以取m最好
这个过程用堆实现,懒得手打了,就用了priority_queue
Code:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<queue> using namespace std; inline int read(){ int re=0,flag=1;char ch=getchar(); while(ch>'9'||ch<'0'){ if(ch=='-') flag=-1; ch=getchar(); } while(ch>='0'&&ch<='9') re=(re<<1)+(re<<3)+ch-'0',ch=getchar(); return re*flag; } struct flight{ int t,cost; }a[300010]; inline bool operator < (flight l,flight r){ return l.cost<r.cost; } priority_queue<flight>q; int n,k;long long tot=0; int ans[300010]; int main(){ int i;flight tmp; n=read();k=read(); for(i=1;i<=n;i++) a[i].t=i,a[i].cost=read(); for(i=1;i<=k;i++) q.push(a[i]); for(i=k+1;i<=k+n;i++){ if(i<=n) q.push(a[i]); tmp=q.top();q.pop(); ans[tmp.t]=i;tot+=(i-tmp.t)*1ll*tmp.cost; } printf("%lld\n",tot); for(i=1;i<=n;i++) printf("%d ",ans[i]); }
相关文章推荐
- CodeForces - 853A Planning(贪心)
- CF853A Planning【贪心】
- #433 - C. Planning(贪心,优先队列)
- CF 853-C
- CF 490E 贪心,回溯法
- Codeforces Round #433 (Div. 2) - C. Planning(贪心+链表)
- CF 190div2 D(贪心)
- CF 557B(Pasha and Tea-贪心)
- CF - 801B. Valued Keys - 构造+贪心
- CF the little match girl (贪心!!!)
- CF - 803D. Magazine Ad - 二分+贪心
- CF - 810B. Summer sell-off - 贪心+排序
- CF - 359 - A. Table(贪心)
- cf.VK CUP 2015.C.Name Quest(贪心)
- CF 447B(DZY Loves Strings-贪心)
- CF 620 C. Pearls in a Row 贪心
- CF Anya and Ghosts (贪心)
- nyoj 1216——整理图书 CF 229D—— Towers——————【dp+贪心】
- CodeForces - 853A Planning(贪心)
- 【贪心+并查集】Codeforces 853A Planning