链接:http://acm.hdu.edu.cn/showproblem.php?pid=1896
学了下优先队列:
#include <iostream>
#include <queue>
#define MAX(a,b) ((a) > (b) ? (a) : (b))
using namespace std;
struct node
{
int pi;
int di;
friend bool operator<(node n1,node n2)
{
if(n1.pi!=n2.pi)
return n2.pi<n1.pi;
return n2.di<n1.di;
}
};
int main()
{
int T;
node tem,next;
int num;
int i;
int n;
int ans;
scanf("%d",&T);
while(T--)
{
priority_queue<node>q;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d%d",&tem.pi,&tem.di);
q.push(tem);
}
num=0;
ans=0;
while(!q.empty())
{
num++;
tem=q.top();
q.pop();
ans=MAX(ans,tem.pi);
if(!(num%2))
continue;
next.pi=tem.pi+tem.di;
next.di=tem.di;
q.push(next);
}
printf("%d
",ans);
}
return 0;
}