您的位置:首页 > Web前端

NYOJ 248 BUYING FEED (贪心)

2014-04-19 21:49 344 查看
样例输入
1
2 5 3
3 1 2
4 1 2
1 1 1

样例输出
7


题意:一条数轴上有n个商店,第i个商店在Xi的位置,最多可以卖Fi磅feed,每磅Ci元。一个人从起点0开始,终点为E,当他到达E点时,至少要买K磅feed,带着1磅feed每前进一个单位,就要额外花费1元。求最小花费是多少。

分析:这道题可以用贪心来做。先求出这个人在每个商店买1磅到达E点时的花费,把它作为这个商店的单价,那么我们在买时就不用考虑这个商店与E点的距离,只需要贪心选择单价小的即可。

#include<stdio.h>

#include<algorithm>

using namespace std;

struct store

{
int x;
int f;
int c;
int cc;

}a[105];

bool cmp(store a1,store a2)

{
return a1.cc<a2.cc;

}

int main()

{
int c,sum;
scanf("%d",&c);
while(c--)
{sum=0;
int k,e,n,i;
scanf("%d%d%d",&k,&e,&n);
for(i=0;i<n;i++)
{scanf("%d%d%d",&a[i].x,&a[i].f,&a[i].c);
a[i].cc=a[i].c+e-a[i].x;
}
sort(a,a+n,cmp);
for(i=0;i<n;i++)
{
if(k>a[i].f)
{ sum+=a[i].cc*a[i].f;
k=k-a[i].f;
}
else
{
sum+=k*a[i].cc;
break;
}

}
printf("%d\n",sum);
}
return 0;

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