[bzoj2059][Usaco2010 Nov][DP]Buying Feed 购买饲料

P2616 [USACO10JAN]购买饲料II Buying Feed, II(贪心) 题目描述 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 (1 <= N &... 阅读详情

Description

约翰开车来到镇上,他要带K吨饲料回家。运送饲料是需要花钱的,如果他的车上有X吨饲料,每公里就要花费X^2元,开车D公里就需要D*
X^2元。约翰可以从N家商店购买饲料,所有商店都在一个坐标轴上,第i家店的位置是Xi,饲料的售价为每吨Ci元,库存为Fi。
约翰从坐标X=O开始沿坐标轴正方向前进,他家在坐标X=E上。为了带K吨饲料回家, 约翰最少的花费是多少呢?假设所有商店的库存之和不会少于K。
举个例子,假设有三家商店,情况如下所示:
坐标 X=1 X=3 X=4 E=5
库存 1 1 1
售价 1 2 2
如果K=2,约翰的最优选择是在离家较近的两家商店购买饲料,则花在路上的钱是1+4=5,花在商店的钱是2+2=4,共需要9元。

Input

第1行:三个整数K,E,N 第2..N+1行:第i+1行的三个整数代表,X_i,F_i,C_i.

Output

一个整数,代表最小花费

Sample Input

2 5 3
3 1 2
4 1 2
1 1 1

Sample Output

9

题解

我的基础真的是辣鸡。一个dp都写不好
首先先考虑朴素dp,设f[i][j]为到了第i家店,1~i-1家店共买了j吨饲料
那么转移可以写成
f[i][j]=min(f[i][j],f[i-1][k]+j*j*d[i]+(j-k)*a[i-1].w);
其中a[i-1].w为第i-1家店饲料的价格,d[i]为第i与i-1家店的距离
复杂度为O(nk^2),很明显炸了
怎么办??先把式子拆了吧
f[i][j]=min(f[i][j],f[i-1][k]+j*j*d[i]+j*a[i-1].w-k*a[i-1].w)
提出来f[i-1][k]+j*j*d[i]+j*a[i-1].w-k*a[i-1].w
把属于k的提出来,变为f[i-1][k]-k*a[i-1].w+j*j*d[i]+j*a[i-1].w
可以发现,后半部分是定值,我们用单调队列维护前半部分就好了
但是如果单纯的单调队列会错,为啥?如果我这家店所能提供的饲料不够我需要的呢?
所以,还要加上几个特判啦

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long LL;
const LL inf=1e15;
struct node
{
    LL x,c,w;//距离 数量 价格 
}a[11000];
bool cmp(node n1,node n2){return n1.x<n2.x;}
LL f[510][11100];//第i家店 1~i-1家店装了j吨饲料
int n,m,kk;//n家店 距离m 希望买kk
LL d[11000];
LL list[11000],head,tail;
int main()
{
    freopen("feed.in","r",stdin);
    freopen("feed.out","w",stdout);
    scanf("%d%d%d",&kk,&m,&n);
    for(int i=1;i<=n;i++)scanf("%lld%lld%lld",&a[i].x,&a[i].c,&a[i].w);
    n++;a[n].x=m;
    sort(a+1,a+1+n,cmp);
    for(int i=2;i<=n;i++)d[i]=a[i].x-a[i-1].x;
    for(int i=0;i<=n;i++)for(int j=0;j<=kk;j++)f[i][j]=inf;
    f[0][0]=0;
    for(LL i=1;i<=n;i++)
    {
        head=tail=0;
        for(LL j=0;j<=kk;j++)
        {
            while(head<tail && j-list[head]>a[i-1].c)head++;//需要买的 本商店不能满足 
            if(f[i-1][j]!=inf)
            {
                while(head<tail)
                {
                    LL k=list[tail-1];
                    if(f[i-1][k]-k*a[i-1].w<f[i-1][j]-j*a[i-1].w)break;
                    tail--;
                }
                list[tail++]=j;
            }
            if(head<tail)
            {
                LL k=list[head];
                f[i][j]=f[i-1][k]+(j-k)*a[i-1].w+j*j*d[i];
            }
        }
    }
    printf("%lld\n",f[n][kk]);
    return 0;
}
光伏系统选型指南:5种主流MPPT算法优缺点对比(附选型流程图) 本文深入剖析了光伏系统中五种主流MPPT算法的核心原理与性能差异。通过对比扰动观察法、电导增量法、恒定电压法、模糊逻辑控制及人工智能算法在追踪精度、响应速度、实现成本与稳定性等方面的表现,为不同应用场景(如户用、工商业及大型电站)提供了清晰的选型决策流程图和实战指南,帮助工程师优化系统效率与投资回报。 阅读详情

相关推荐

微信小程序网关逆向分析:从协议、签名到会话管理的安全架构剖析

在现代Web与移动应用开发中,API网关作为客户端与后端服务之间的关键通信枢纽,承担着协议转换、流量调度、安全防护与性能优化等核心职责。其工作原理通常涉及统一的请求路由、身份认证、参数校验与响应聚合。从技术价值看,深入理解网关机制不仅能帮助开发者构建更健壮、可扩展的微服务架构,还能为安全评估、性能调优与故障排查提供基础。在移动生态如微信小程序中,网关设计尤为关键,它需要处理微信特有的登录态、数据加密与防重放攻击等安全需求。本文聚焦于微信小程序网关的逆向分析方法,通过结合网络抓包与代码反编译技术,深入解析其通

weixin_29323493的博客 442

BZOJ2059: [Usaco2010 Nov]Buying Feed 购买饲料

数轴上n<=500个站可以买东西,每个站位置Xi,库存Fi,价格Ci,运东西价格是当前运载重量的平方乘距离,求买K<=10000个东西到达点E的最小代价。 f[i,j]--到第i站不买第i站东西的最大值,转移时决策的是买上一个站的东西,f[i,j]=f(i-1,k)+(j-k)*C(i-1)+j*j*(Xi-Xi-1)。 这个拆一下就可以单调队列了。 1 #i...

a2850363633的博客 203

从无序到结构化:HAC框架如何用哈希网格重构3D高斯压缩范式 | ECCV2024技术解读

本文深入解读了ECCV 2024提出的HAC框架,它通过引入二值哈希网格为无序的3D高斯锚点建立空间结构,并利用上下文模型进行自适应量化,从而实现了对3D Gaussian Splatting模型的高效压缩。该方法将压缩范式从单纯削减数据转向智能理解数据关系,在保持高质量渲染的同时,显著提升了压缩率,为移动端部署和实时应用提供了新方案。

yolo5detector的博客 459

bzoj2059[Usaco2010 Nov]Buying Feed 购买饲料*

bzoj2059[Usaco2010 Nov]Buying Feed 购买饲料 题意: 约翰开车来到镇上,他要带K吨饲料回家。如果他的车上有X吨饲料,每公里就要花费X^2元,开车D公里就需要D* X^2元。约翰可以从N家商店购买饲料,所有商店都在一个坐标轴上,第i家店的位置是Xi,饲料的售价为每吨Ci元,库存为Fi。n≤500,k≤10000。 题解: dp。f[i][j]表示在...

anheku1562的博客 176

软件测试--用例篇(测试用例的好处、测试用例的七种设计方法、测试用例的粒度、测试用例的评价)

作为软件测试工程师,最主要的工作就是:编写测试用例,那么为什么要编写测试用例?它有什么好处?如何编写测试用例?测试用例写简单好还是复杂好?如何评价测试用例的质量? 天呐撸!能说不会吗?! 作为倾向软件测试工程师的老铁们,还是一起来学习吧! 一、编写测试用例的好处 测试用例是测试者的依据 测试用例使得工作可重复,是自动化测试的基础 补充:自动化测试的前提条件是:功能比较稳定,页面...

cherrydreamsover的博客 3734

通信原理与MATLAB(八):2PSK的调制解调

通信原理和MATLAB

菜yuan~的博客 3万+

BZOJ 2059 [Usaco2010 Nov]Feed 购买饲料

BZOJ_2059     本来打算想想费用流的,但是既然给的是直线,八成就是让dp了,否则完全可以给成图的。     不妨用f[i][j]表示递推到第i个商店时,在前i-1个商店一共买了j的饲料,这样就有状态转移方程f[i][j]=min{f[i-1][k]+(j-k)*C[i-1]}+j*j,其中0&lt;=j-k&lt;=F[i-1]。这样裸着做的话,复杂度是没法承受的,但如果把min{...

weixin_33810006的博客 147

cmw500 lte非信令测试_WiFi信令测试在研发过程中的作用

  1、关于信令测试的故事  2016年的某天,某著名网络产品公司技术负责人致电寻求技术支持:我们的无线路由器遇到了一个困惑:我们某款路由器应用于实际WiFi网络中时,WiFi终端接入非常困难。但是我们使用测试工具检测此路由器,它的所有物理射频指标都非常优异。不知道是为什么?  我来到了测试现场看到:WiFi路由器受控于芯片公司的测试工具,其WiFi发射机指标在非信令测试仪上显示:无论功率、EVM...

weixin_39662263的博客 3924

洛谷 P2616 [USACO10JAN]购买饲料II Buying Feed, II

贪心

sdfzrlt的博客 842

Docker一键部署Synopsys EDA全家桶(VCS/Verdi 2018版)保姆级教程

本文提供了一份详尽的Docker容器化部署Synopsys EDA工具链(VCS/Verdi 2018版)的保姆级教程。通过环境隔离与标准化,解决传统安装的依赖冲突问题,并重点攻克了容器内GUI图形界面显示的核心难题。教程涵盖从Docker基础安装、镜像获取、容器启动配置,到使用X11转发或VNC实现Verdi完美显示的完整实践,旨在帮助芯片设计工程师快速构建稳定、可移植的一键化EDA工作环境。

weixin_29281941的博客 198

使用.NET 免费开源包ViewFaceCore做一个人脸识别并注册的功能,没有比我更全的

本文介绍了一个基于WinForm的免费人脸识别系统实现方案。系统使用AForge和ViewFaceCore库,支持从USB或电脑自带摄像头采集图像,具备人脸注册和快速识别功能。硬件方面仅需普通摄像头,软件依赖多个NuGet包(如AForge.Video、ViewFaceCore等)。界面包含视频显示、图像预览和功能按钮控件,后台采用SQLServer存储用户面部特征数据。核心代码展示了人脸检测、特征提取和多线程处理逻辑,通过ViewFaceCore实现高效识别。系统具有识别速度快、准确率高的特点,适合Win

一个靠“吃代码”长大的程序猿,专治各种“Bug 饥饿症”。 817

[DP/单调队列]BZOJ 2059 [Usaco2010 Nov]Buying Feed 购买饲料

首先我想吐槽的是题目并没有表明数据范围。。。 这个题目 DP方程并不难表示。 dp[i][j]表示前i个地点携带了j个货物的最小花费 dp[i][j] = dp[i-1][k] + (j-k) * cost + j*j*(leng[i]-leng[i-1]) 如果你这样直接提交上去,恭喜你超时!!! 因为这个时间复杂度是 O(n*k^2) 所以我们需要优化一下,可以发现式子可以化简...

weixin_30493401的博客 184

Colmap论文——《Structure-from-Motion Revisited》论文阅读笔记

  最近又将Colmap论文翻出来仔细阅读总结了一下,于是顺便写个博客记录一下。Structure-from-Motion Revisited是当前SOTA的增量式SfM算法Colmap的论文,发表于2016年计算机视觉顶会CVPR。它是增量式SfM里程碑式的作品。 论文地址:https://openaccess.thecvf.com/content_cvpr_2016/papers/Schonberger_Structure-From-Motion_Revisited_CVPR_2016_paper.p

zeeq的博客 1万+

USACO DP泛做

我是不是太久没更新blog了。。那就来水一波USACO的DP吧。 发现之前的刷题速度真是慢的蛋疼 放一些还可以的题。。

cgh_Andy's Blog 1591

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

[USACO10NOV]购买饲料Buying Feed 单调队列优化DP

题目描述 约翰开车来到镇上,他要带 KKK 吨饲料回家。运送饲料是需要花钱的,如果他的车上有 XXX 吨饲料,每公里就要花费 X2X^2X2 元,开车D公里就需要 D×X2D\times X^2D×X2 元。约翰可以从 NNN 家商店购买饲料,所有商店都在一个坐标轴上,第 iii 家店的位置是 XiX_iXi​ ,饲料的售价为每吨 CiC_iCi​ 元,库存为 FiF_iFi​ 。 约翰从...

weixin_30869099的博客 231

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【USACO 2010 Nov Gold】买饲料

Description 约翰开车回家,准备顺路买点饲料了 。回家的路程一共有E公里,一路上会经过K家商店,第i家店里有Fi 吨饲料,售价为每吨Ci元。约翰打算一共买N吨饲料,可以保证所有商店的库存和不会少于N。除了购买饲料要钱,运送饲料要花油钱,约翰的卡车上如果装着X吨饲料,那么他行驶一公里会花掉X^2元,行驶D公里需要DX^2元。已知第i家店距离起点有Xi公里,那么约翰在哪些商店买饲料运回家,...

DancingZ的博客 425

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【BZOJ2059】Buying Feed 购买饲料

题面 约翰开车来到镇上,他要带V吨饲料回家。如果他的车上有X吨饲料,每公里就要花费X^2元,开车D公里就需要D* X^2元。约翰可以从N家商店购买饲料,所有商店都在一个坐标轴上,第i家店的位置是Xi,饲料的售价为每吨Ci元,库存为Fi。n≤500,k≤10000。 输入格式 第1行:三个整数V,E,N 第2..N+12..N+1行:第i+1行的三个整数代表Xi​,Fi​,Ci​. 输...

weixin_30834019的博客 216

[USACO3.2.4 Feed Ratios]

Description 农夫约翰从来只用调配得最好的饲料来喂他的奶牛。饲料用三种原料调配成:大麦,燕麦和小麦。他知道自己的饲料精确的配比,在市场上是买不到这样的饲料的。他只好购买其他三种混合饲料(同样都由三种麦子组成),然后将它们混合,来调配他的完美饲料。  给出三组整数,表示 大麦:燕麦:小麦 的比例,找出用这三种饲料调配 x:y:z 的饲料的方法。  例如,给出目标饲料 3:4:

shiyuan的专栏 884

P4544 [USACO10NOV]购买饲料Buying Feed

额,直接思路就dp吧。(我还想了想最短路之类的233但事实证明不行2333.....) 直入主题: 化简题意:在x轴上有n个点,坐标为xi。从原点出发,目标点为e,在途中需要收集K重量的物品,在每个点有收集的上限和单价,路费是当前已收集重量*距离,求最小值。 首先,最暴力的方程式很好推(普及难度),枚举当前点,当前点总重量,nk^2的复杂度(25 0000 0000 233.....

374

P2729 饲料调配 Feed Ratios(模拟::(恶心))

题目背景 农夫约翰从来只用调配得最好的饲料来喂他的奶牛。饲料用三种原料调配成:大麦,燕麦和小麦。他知道自己的饲料精确的配比,在市场上是买不到这样的饲料的。他只好购买其他三种混合饲料(同样都由三种麦子组成),然后将它们混合,来调配他的完美饲料。 题目描述 给出三组整数,表示 大麦:燕麦:小麦 的比例,找出用这三种饲料调配 x:y:z 的饲料的方法。 例如,给出目标饲料 3:4:5 和三种饲料...

一身清贫怎敢入繁华 1247

usaco Chapter 3 section 3.2 Feed Ratios

/*ID: niepeng1LANG: C++TASK:ratios这题太水,无话可说。*/#include using namespace std;FILE *in,*out;int dest[3];int map[3][3];int way[3];void read(){ int i; fscanf(in,"%d %d %d",&dest[0],&dest[1],&dest[2])

china1000的专栏 490

USACO 2010 Jan Silver 2.Buying Feed, II

贪心,每一个物品运到家的花费是单价+运费 #include #include using namespace std; #define inf 1000 struct node { int len,tot,mon,act; }edge[inf]; int cmp(node a,node b) { return a.act<b.act; } int k,e,n; int main() { s

KatnissJ的博客 1005

usaco3.2.4 Feed Ratios

一 原题 Feed Ratios 1998 ACM Finals, Dan Adkins Farmer John feeds his cows only the finest mixture of cow food, which has three components: Barley, Oats, and Wheat. While he knows the precise mixtur

max_kibble的博客 495

卖饲料——单调队列优化dp

题目描述 约翰开车来到镇上,他要带K吨饲料回家。运送饲料是需要花钱的,如果他的车上有X吨饲料,每公里就要花费X^2元,开车D公里就需要D* X^2元。约翰可以从N家商店购买饲料,所有商店都在一个坐标轴上,第i家店的位置是Xi,饲料的售价为每吨Ci元,库存为Fi。约翰从坐标X=O开始沿坐标轴正方向前进,他家在坐标X=E上。为了带K吨饲料回家, 约翰最少的花费是多少呢?假设所有商店的...

weixin_30448685的博客 247
上一篇: [bzoj1742][Usaco2005 nov][DP]Grazing on the Run 边跑边吃草
下一篇: [bzoj3312][Usaco2013 Nov][DP]No Change不找零
Rose_max
博客等级 码龄10年 97粉丝 610原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值