题解 NYOJ248 BUYING FEED

题目:http://acm.nyist.net/JudgeOnline/problem.php?pid=248

分析:英文题目,看懂了,画几下,就发现其实就是一个贪心背包的变形,水题一个~话不多少,代码走起~

/*
部分背包的变体,水题 
只需要算出每个商店的单位总费用 = 原单位费用+距离的费用 
*/


#include <iostream>
using namespace std;
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>


struct Node
{
       int w,v;
};


Node stores[101];


int cmp(const void *a,const void *b)
{
    Node *x = (Node*)a;
    Node *y = (Node*)b;
    
    return x->v - y->v;
}


int main()
{
    
    int T;
    cin >> T;
    
    while (T--)
    {
          int k,e,n;
          cin >> k >> e >> n;
          
          for (int i = 0; i < n; ++i)
          {
              int x,f,c;
              cin >> x >> f >> c;    
              stores[i].w = f;
              stores[i].v = c + e - x;
          }
          
          qsort(stores,n,sizeof(Node),cmp);
          
          int ans = 0;
          for (int i = 0; i < n && k > 0; ++i)
          {
              if (stores[i].w <= k)
                 {
                 ans += stores[i].w*stores[i].v;
                 k -= stores[i].w; 
                 }
                 else
                 {
                 ans += k*stores[i].v;
                 break;
                 }
          }
          cout << ans << endl;
    }


    return 0;
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值