1 条题解
-
2
不妨假设没有折扣价,直接将折扣作为优惠券加入,满a[i]元省a[i]-b[i]元,然后直接贪心。从小到大排序原价,用小根堆维护优惠券,贪心的使用w小的优惠券即可
证明:证明略
#include<bits/stdc++.h> #define int long long using namespace std; int n,m,t=1,ans; int a[1000005],b[1000005]; priority_queue<int> p; struct node{ int w; int v; bool operator<(const node &t)const{ return w<t.w; } }e[2000006]; signed main(){ freopen("buy.in","r",stdin); freopen("buy.out","w",stdout); scanf("%lld%lld",&n,&m); for(int i=1;i<=n;i++) scanf("%lld%lld",&a[i],&b[i]); for(int i=1;i<=m;i++) scanf("%lld%lld",&e[i].w,&e[i].v); for(int i=1;i<=n;i++) e[i+m].w=a[i],e[i+m].v=a[i]-b[i]; sort(a+1,a+n+1); m=m+n; sort(e+1,e+m+1); for(int i=1;i<=n;i++){ while(t<=m&&e[t].w<=a[i]) p.push(e[t].v),t++; ans+=a[i]; if(!p.empty()){ ans-=p.top(); p.pop(); } } printf("%lld",ans); return 0; }
- 1
信息
- ID
- 2189
- 时间
- 5000ms
- 内存
- 512MiB
- 难度
- 9
- 标签
- 递交数
- 14
- 已通过
- 3
- 上传者