description
乙隻有追求的兔紙,不應該終日遊戲。於是它參加了乙個名為蘿蔔大戰的遊戲,啊不,比賽。
比賽開始時,場地上有nn個蘿蔔,第ii個蘿蔔具有美味度didi。更加詭異的是,第ii個蘿蔔會在第titi秒末消失。
雖然兔紙每秒至多吃掉11個蘿蔔,但是它仍然急切地想要知道,它能吃掉蘿蔔美味度之和的最大值是多少。
input specification
第 11 行, 11 個整數 nn。
第 22 行到第 n+1n+1 行, 22 個整數di,tidi,ti。
output specification
第 11 行, 11 個整數, 表示美味度之和的最大值。
input and output sample
[input #1]
21 2
2 1[output #1]
3[input #2]
31 2
2 23 1
[output #2]
【思路】一開始想按d的大小排序,用樹狀陣列,每次摘取d最大的蘿蔔,判斷該時間t中摘取的蘿蔔是否超過t個。然而這是錯的,因為每次修改並不是按順序來的,後面的修改不會對前面產生影響,而實際上是會的。
解法1、
按t的值從小到大排序,每次把蘿蔔塞進優先佇列裡,若佇列中蘿蔔個數大於此時的時間限制,讓最小的蘿蔔出隊,此優先佇列即表示該時間t下能塞下的最大的前i(i<=t)個蘿蔔
【**】
#include #include #include #include #include #include #define maxn 1000006
#define ll long long
using namespace std;
struct data
void init()
while(q.size())ans+=q.top(),q.pop();
printf("%lld\n",ans);
}int main()