原题: http://acm.nyist.net/JudgeOnline/problem.php?pid=248
//nyoj 248
//贪心:关键在于把路程的费用也加入到商品的单价中来,然后每次买单价最低的商品 就可以了。
#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
using namespace std;
struct W
{
int wi;
int vi;
}w[101];
int cmp(const void *aa,const void *bb)
{
W a=*(W *)aa;
W b=*(W *)bb;
return a.vi>b.vi;//找单位价值最小的
}
int main()
{
int t;
while(~scanf("%d",&t))
{
while(t--)
{
int need,end,n;
scanf("%d %d %d",&need,&end,&n);
for(int i=0;i<n;i++)
{
int pos;
scanf("%d %d %d",&pos,&w[i].wi,&w[i].vi);
w[i].vi+=end-pos;
}
qsort(w,n,sizeof(w[0]),cmp);
int sum=0;
for(int i=0;i<n;i++)
{
if(need>=w[i].wi)
{
sum+=w[i].wi*w[i].vi;
need-=w[i].wi;
}else{
sum+=w[i].vi*need;
break;
}
}
printf("%d\n",sum);
}
}
return 0;
}
本文介绍了一道经典贪心算法题目——NYOJ248的解题思路与实现代码。该题要求选手通过购买商品并考虑路程成本的方式,找到花费最少的购买方案。文章提供了一个C++实现的例子,展示了如何将路程费用纳入商品单价,并通过排序选择单位价值最小的商品进行购买。
693

被折叠的 条评论
为什么被折叠?



