标签:为什么 span splay ons close market div const out
一道经典的贪心题。
我们不妨将物品按照价值从大到小排序,对于每一个物品,我们尽量让它晚一些被售出,这样得到的答案一定是最优解。
我们可以简单证明一下,首先我们先售出获利较大的物品,这个的正确性是显然的。对于某一个物品,我们最好在时间范围之内让它最晚被售出。为什么呢?因为这个物品在允许范围内的任意时间售出的获利都是相等的,而我们让它最晚售出,就能为之后的物品留出更早的时间,因此之后的物品就更容易被售出。
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 #include <queue> 6 using namespace std; 7 typedef long long ll; 8 int n; 9 struct node { 10 int date,val; 11 bool operator <(const node &x) const { 12 return val>x.val; 13 } 14 }a[100010]; 15 int vis[100010]; 16 int main() { 17 while(cin>>n) { 18 for(int i=1;i<=n;i++) 19 cin>>a[i].val>>a[i].date; 20 sort(a+1,a+n+1); 21 int ans=0; 22 memset(vis,0,sizeof(vis)); 23 for(int i=1;i<=n;i++) { 24 for(int j=a[i].date;j;j--) { 25 if(!vis[j]) { 26 vis[j]=1; 27 ans+=a[i].val; 28 break ; 29 } 30 } 31 } 32 cout<<ans<<endl; 33 } 34 return 0; 35 }
标签:为什么 span splay ons close market div const out
原文地址:https://www.cnblogs.com/shl-blog/p/10803612.html