#貪心#洛谷 6093 [JSOI2015]套娃
阿新 • • 發佈:2021-06-21
分析
按好看度從大到小排序,每次選擇一個儘量大的外徑裝入當前套娃的內徑,
這樣可以保證是最優的,刪除選完的外徑可以用平衡樹實現
程式碼
#include <cstdio> #include <cctype> #include <set> #include <algorithm> #define rr register using namespace std; const int N=200011; multiset<int>uk; multiset<int>::iterator it; int l[N],r[N],rk[N],n; long long a[N],ans; inline signed iut(){ rr int ans=0; rr char c=getchar(); while (!isdigit(c)) c=getchar(); while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar(); return ans; } bool cmp(int x,int y){return a[x]>a[y];} signed main(){ n=iut(); for (rr int i=1;i<=n;++i){ r[i]=iut(),l[i]=iut(),a[i]=iut(), rk[i]=i,uk.insert(r[i]),ans+=a[i]*l[i]; } sort(rk+1,rk+1+n,cmp); for (rr int i=1;i<=n;++i){ it=uk.lower_bound(l[rk[i]]); if (it!=uk.begin()) --it,ans-=a[rk[i]]*(*it),uk.erase(it); } return !printf("%lld",ans); }