POJ 3544 Journey with Pigs(贪心)

传送门:POJ 3544

题意:将n个猪卖给n个村庄,猪重wi,每个村庄到起点的距离是dj,每斤猪肉在第j个村庄的单价是pj,每斤猪肉运输一个单位长度花费t元,为保证赚到最多的钱,该怎样分配。输出n个数,第j个数表示出售到第j个村庄的猪的编号,每只猪的编号从1开始。

题解:贪心。先求出每斤猪肉在每个村庄出售后能赚到的钱数,然后将体重最重的猪分配给钱数最多的村庄。

代码:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <vector>
#include <set>
#include <map>
typedef long long ll;
using namespace std;
struct vallge
{
    ll d;//距离
    ll p;//价格
    ll tmp;//净赚的钱数
    ll numv;//村庄编号
}va[1005];
struct pig
{
    ll w;//猪的重量
    ll nump;//猪的编号
}pi[1005];
bool cmp1(struct vallge a,struct vallge b)//按净赚的钱数对村庄进行排序(由大到小)
{
    return a.tmp>b.tmp;
}
bool cmp2(struct pig a,struct pig b)//对猪的重量进行排序(由大到小)
{
    return a.w>b.w;
}
int main()
{
    int n,t,i;
    while(~scanf("%d%d",&n,&t))
    {
        for(i=0;i<n;i++)
        {
            cin>>pi[i].w;
            pi[i].nump=i;//赋编号
        }
        for(i=0;i<n;i++)
        {
            cin>>va[i].d;
            va[i].numv=i;//赋编号
        }
        for(i=0;i<n;i++)
            {
                cin>>va[i].p;
                va[i].tmp=va[i].p-va[i].d*t;//求出在每个村庄净赚到的钱数
            }

        sort(va,va+n,cmp1);
        sort(pi,pi+n,cmp2);
        ll ans[10005];
        for(i=0;i<n;i++)
            ans[va[i].numv]=pi[i].nump;//将村庄和猪的编号一对一赋给数组
        for(i=0;i<n-1;i++)
            cout<<ans[i]+1<<" ";
        cout<<ans[n-1]+1<<endl;
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值