说明
过年了,小紫和小兰跟着爸爸妈妈去给姥姥拜年,姥姥看到小紫和小兰非常的开心,拿出了各种各样的糕点糖果招待他们,小兰嘴馋的直流口水,可是身为信奥队一员的小紫总是跟别人不同,他发现生活中处处都是有趣的信奥难题,他要求小兰先答对了他的问题才能吃这些糕点。
小紫发现一共有 n 种糕点,初始 小兰只能吃得下一个糕点。
但是每个糕点有两个属性,第 i 个糕点的属性为:ai,bi。分别表示吃掉这个糕点后,小兰的开心程度会增加 ai,并且由于开胃效果很好,能让 小兰 多吃下 bi 个糕点。
那么小兰怎么吃才能使得她的开心程度最高,小兰找到同样是信奥队的你,请你帮她算一算这个最高值是多少。
输入数据
第一行为一个正整数 n。
接下来 n 行,每行为两个正整数,第 i 行为 ai,bi
输出数据
输出 小兰 的开心程度的最大值。
题解
# include <bits/stdc++.h>
# include <algorithm>
using namespace std;
int jed=1,kx=0,big,wz;
int flag[10086];
struct gd
{
int a;
int b;
};
gd dg[10086];
int main()
{
int n;
cin>>n;
int sy=n;
for (int u=0;u<n;u++)
cin>>dg[u].a>>dg[u].b;
for (int u=0;u<n;u++)
{
if (dg[u].b!=0)
{
jed+=dg[u].b-1;
kx+=dg[u].a;
flag[u]=1;
sy-=1;
}
}
while (sy&&jed)
{
big=-1;
for (int u=0;u<n;u++)
{
if (!flag[u]&&dg[u].a>big)
{
big=dg[u].a;
wz=u;
}
}
kx+=dg[wz].a;
flag[wz]=1;
jed-=1;
sy-=1;
}
cout<<kx;
return 0;
}