​Fountains CodeForces - 799C ​​​
题意:给n,c,d代表喷泉个数,拥有硬币和砖石个数。接下来n行有b,p,c代表改喷泉美丽指数和价格CD代表用什么当作货币。
思路:只存下价格小于c,d的喷泉。进行排序,选择c+d,c+c,d+d中值最大的。这里直接n^2的搜索,就加了一点剪枝,卡过去了。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int maxn=100000+10;
struct node
{
int b;int p;
bool operator <(const node &u)const{
return b>u.b;
}
}C[maxn],D[maxn];
int main()
{
int n,c,d;
int b,p;char e;
scanf("%d %d %d",&n,&c,&d);
int cnt=0,dnt=0;
for(int i=0;i<n;i++)
{
scanf("%d %d %c",&b,&p,&e);
if(e=='C'){
if(p<=c) C[cnt].b=b,C[cnt++].p=p;
}
else
{
if(p<=d) D[dnt].b=b,D[dnt++].p=p;
}
}
sort(C,C+cnt);sort(D,D+dnt);
int ans=0;
if(cnt>0&&dnt>0) ans=C[0].b+D[0].b;
for(int i=0;i<cnt;i++)
{
for(int j=i+1;j<cnt;j++)
if(C[i].p+C[j].p<=c)
{
ans=max(ans,C[i].b+C[j].b);
break;//
}
}
for(int i=0;i<dnt;i++)
{
for(int j=i+1;j<dnt;j++)
if(D[i].p+D[j].p<=d)
{
ans=max(ans,D[i].b+D[j].b);
break;
}
}
printf("%d\n",ans);
return 0;
}