您的位置:首页 > 其它

贪心+STL—— [Usaco2007 Dec]挑剔的美食家

2011-09-13 22:13 218 查看
思想是按草的新鲜程度作为第一关键词,前作为第二关键词排序(因为要取钱较少的,所以草鲜嫩排第一)

multiset 储存符合第二关键词的 所有第一关键词,取合理且最小的第一关键词累积

View Code

#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<vector>
#include<set>
using namespace std;

int main()
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
vector<pair<int,int> > ve;
vector<pair<int,int> > ve1;

int i,j,a,b;
for(i=0;i<n;i++)
{
scanf("%d%d",&a,&b);
ve.push_back(make_pair(b,a));
}
for(i=0;i<m;i++)
{
scanf("%d%d",&a,&b);
ve1.push_back(make_pair(b,a));
}

sort(ve.begin(),ve.end());
sort(ve1.begin(),ve1.end());

multiset<int>set1;
int ok=0;
long long all=0;
j=m-1;
for(i=n-1;i>=0;i--)
{
for(;j>=0;)
{
if(ve1[j].first>=ve[i].first)
{
set1.insert(ve1[j].second);
j--;
}
else
{
break;
}
}
if(set1.size()==0)
{
printf("-1\n");
ok=1;
break;
}
multiset<int>::iterator p= set1.lower_bound(ve[i].second);
//cout<<" "<<*p;
all+=*p;
set1.erase(p);
}

if(ok==0)
{
printf("%lld\n",all);
}
}

return 0;
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: