原题链接:http://codeforces.com/problemset/problem/155/B
分析:
题意分析:给你一些卡片,有正面和背面。拿出一张卡片,加上正面的分数后,又可以拿背面张卡片数到手上,问最多可以的多少分。
算法分析:用一个队列模拟取牌统计。
我的代码:
#include<stdio.h>
#include<algorithm>
#include<queue>
using namespace std;
struct Node
{
int x;
int y;
bool operator <(const Node &a) const{
return y>a.y ||(y==a.y&&x>a.x);
}
}p[1005];
int main()
{
int n;
while(1==scanf("%d",&n))
{
for(int i=0;i<n;i++)
{
scanf("%d%d",&p[i].x,&p[i].y);
}
sort(p,p+n);
queue<Node> Q;
int i=0,sum=0;
Q.push(p[i]);
while(!Q.empty())
{
Node u=Q.front();
Q.pop();
sum+=u.x;
// printf("sum=%d\n",sum);
int e=i+u.y;
for(int j=i+1;j<=e;j++)
{
// printf("i=%d\n",i);
if(j>=n) break;
Q.push(p[j]);
i++;
}
}
printf("%d\n",sum);
}
return 0;
}
总结:读不懂题目意思是硬伤~~o(>_<)o ~~