NYOJ 248 && BNUOJ 4151 BUYING FEED (贪心)

【题目链接】click here~~

【题目大意】FJ开车去买K份食物,如果他的车上有X份食物。每走一里就花费X元。FJ的城市是一条线,总共E里路,有E+1个地方,标号0~E。FJ从0开始走,到E结束(不能往回走),要买K份食物。城里有N个商店,每个商店的位置是X_i(一个点上可能有多个商店),有F_i份食物,每份C_i元。问到达E并买K份食物的最小花费。

【解题思路】

把每个站点的物品看成是一件物品,每件物品除了价值之外,还附加了从站点到终点的运费。也就是买1磅到达终点时的花费,把它作为这个商店的单价排序一次,最后选择取花费最少的前k个物品。

代码:

#include <bits/stdc++.h>
using namespace std;
struct node
{
    int FI_Count,DI_Value;
} shop[102];
bool cmp(const node& s1,const node& s2)
{
    return s1.DI_Value<s2.DI_Value;
}
int main()
{
    //freopen("1.txt","r",stdin);
    int T,K,E,N,dist;
    scanf("%d",&T);
    while(T--)
    {
        int cost=0;
        scanf("%d%d%d",&K,&E,&N);
        for(int i=0; i<N; i++)
        {
            scanf("%d%d%d",&dist,&shop[i].FI_Count,&shop[i].DI_Value);
            shop[i].DI_Value+=E-dist;//每个站点的每磅物品看成是一件物品,每件物品除了卖价之外,还附加了从站点到终点的运费
        }
        sort(shop,shop+N,cmp);
        for(int i=0;i<=K;i++){
            if(K>shop[i].FI_Count){//买物品
                cost+=shop[i].DI_Value*shop[i].FI_Count;
                K-=shop[i].FI_Count;
            }
            else{//剩余物品不够K件
                cost+=shop[i].DI_Value*K;
                K=0;
            }
        }
        printf("%d\n",cost);
    }
    return 0;
}
时间: 2024-10-12 19:56:03

NYOJ 248 && BNUOJ 4151 BUYING FEED (贪心)的相关文章

nyoj248 BUYING FEED(贪心orDP)

题目248 题目信息 运行结果 本题排行 讨论区 BUYING FEED 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 Farmer John needs to travel to town to pick up K (1 <= K <= 100)pounds of feed. Driving D miles with K pounds of feed in his truck costs D*K cents. The county feed lot has N

2020: [Usaco2010 Jan]Buying Feed, II

2020: [Usaco2010 Jan]Buying Feed, II Time Limit: 3 Sec  Memory Limit: 64 MBSubmit: 220  Solved: 162[Submit][Status] Description (buying.pas/buying.in/buying.out 128M 1S) Farmer John needs to travel to town to pick up K (1 <= K <= 100) pounds of feed

BUYING FEED (第三届省赛)

BUYING FEED (英文题!!!!   为那些跟我一样acmer翻译一下吧  是实话 看不懂题真的很烦人     以上都是废话, 下面解释 英文题不出意外还是队友写的, 题意是第一行输入  要买的量k   要走的总长度e   店铺的数量n :    然后就是每家店铺距离起点的距离    存货量    成本   . ps : 将一单位的物品移动一个单位的距离要花费1磅运费: 求  需要花费的最小的成本: (这道题的解题思路在于按照  将每家店铺以单位的物品运到终点所需要的成本 排序, 然后从

[河南省ACM省赛-第三届] BUYING FEED (nyoj 248)

#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; #define N 352 /* 重量*单价+重量*距离 = 重量*(距离+单价) 预处理单价 贪心:优先买价格低的 */ struct Node { int p;// p = (单价+距离) int w; }c[N]; bool cmp(Node a, Node b)

题解 NYOJ248 BUYING FEED

题目:http://acm.nyist.net/JudgeOnline/problem.php?pid=248 分析:英文题目,看懂了,画几下,就发现其实就是一个贪心背包的变形,水题一个~话不多少,代码走起~ /* 部分背包的变体,水题 只需要算出每个商店的单位总费用 = 原单位费用+距离的费用 */ #include <iostream> using namespace std; #include <cstdio> #include <cstdlib> #includ

nyoj 47 过河 过河问题 【贪心】

经典贪心: 两种方案:一:让最快的和次最快的先过去,最快的回来,然后最慢的和次最慢的过去,次最快的回来a[0]+a[1]+a[1]+a[n-1] 二:最快的和最慢的过去,最快的回来,最快的和当前最慢的过去,最快的回来.a[0]+a[n-1]+a[0]+a[n-2] 每次取最优解. 注意:最后剩余没过的人小于等于3的时候,要特殊判断. 代码: #include <cstdio> #include <cstring> #include <algorithm> #define

nyoj 791——Color the fence——————【贪心】

Color the fence 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 Tom has fallen in love with Mary. Now Tom wants to show his love and write a number on the fence opposite to Mary’s house. Tom thinks that the larger the numbers is, the more chance to win Mary’s

nyoj 791 Color the fence 【贪心】

Color the fence 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 Tom has fallen in love with Mary. Now Tom wants to show his love and write a number on the fence opposite to Mary's house. Tom thinks that the larger the numbers is, the more chance to win Mary's

NYOJ 14 会场安排问题(贪心算法)

时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办.小刘的工作就是安排学校小礼堂的活动,每个时间最多安排一个活动.现在小刘有一些活动计划的时间表,他想尽可能的安排更多的活动,请问他该如何安排. 输入 第一行是一个整型数m(m<100)表示共有m组测试数据.每组测试数据的第一行是一个整数n(1<n<10000)表示该测试数据共有n个活动.随后的n行,每行有两个正整数Bi