【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 .
输出格式
一个整数,代表最小花费.
数据范围
1 ≤ V≤ 10000 , 1 ≤ E ≤ 500 , 1 ≤ N ≤ 500;
0 < Xi < E, 1 ≤ Fi ≤ 10000, 1 ≤ Ci ≤ 10^7
思路
首先打一个2维dp,表示在第i个点拥有j个饲料需要至少多少钱。
sort一遍xi,然后三重循环dp,方程为dp[i][j]=min(dp[i][j],dp[i-1][j-k]+a[i].c*k+(a[i].x-a[i-1].x)*(j-k)*(j-k));
最后cout<<dp[n][v]+(e-a[n].x)*v*v<<endl;表示最后一个店到家的最少价格+1...n家店的最小价值(就是1...n的最小价值)
#include<bits/stdc++.h> using namespace std; struct node{int x,f,c;}a[505]; long long v,e,n,dp[505][10005]; bool cmp(node p,node q){return p.x<q.x;} inline int read(){ int ret=0,f=1;char ch=getchar(); while (ch<'0'||ch>'9') {if (ch=='-') f=-f;ch=getchar();} while (ch>='0'&&ch<='9') ret=ret*10+ch-'0',ch=getchar(); return ret*f; } int main(){ freopen("d.in","r",stdin); freopen("d.out","w",stdout); v=read();e=read();n=read(); memset(dp,0x7f,sizeof(dp)); for (int i=1;i<=n;i++) a[i].x=read(),a[i].f=read(),a[i].c=read(); sort(a+1,a+n+1,cmp); dp[0][0]=0; for (int i=1;i<=n;i++) for (int j=0;j<=v;j++) for (int k=0;k<=a[i].f&&k<=j;k++) dp[i][j]=min(dp[i][j],dp[i-1][j-k]+a[i].c*k+(a[i].x-a[i-1].x)*(j-k)*(j-k)); cout<<dp[n][v]+(e-a[n].x)*v*v<<endl; return 0; }
可惜以上方法会炸
那就让我们来优化吧:首先把家当做一个店,距离为e,库存为0,单价为0.
然后用一个deque存k.
如果(j-q.front() > a[i-1].f)就pop掉队首, 因为i-1的店库存不够;
如果top=q.back(), dp[i-1][top]-a[i-1].c*top>=dp[i-1][j]-w[i-1]*j, 就pop掉队尾;
过程中有可能爆int,所以开long long。
#include<bits/stdc++.h> using namespace std; ]; ][]; bool cmp(node p,node q){return p.x<q.x;} int main(){ freopen("d.in","r",stdin); freopen("d.out","w",stdout); cin>>v>>e>>n; memset(dp,0x7f,sizeof(dp)); ;i<=n;i++) cin>>a[i].x>>a[i].f>>a[i].c; n++; a[n]=(node){e,,}; sort(a+,a+n+,cmp); dp[][]=; ;i<=n;i++) { deque<long long>q; ;j<=v;j++) { ].f) q.pop_front(); ][j]!=0x7f) { ][q.back()]-a[i-].c*q.back()>=dp[i-][j]-a[i-].c*j) q.pop_back(); q.push_back(j); } int top=q.front(); ][top]-a[i-].c*top+(a[i].x-a[i-].x)*j*j+a[i-].c*j; } } cout<<dp[n][v]<<endl; ; }
【BZOJ2059】Buying Feed 购买饲料的更多相关文章
- BZOJ2059: [Usaco2010 Nov]Buying Feed 购买饲料
数轴上n<=500个站可以买东西,每个站位置Xi,库存Fi,价格Ci,运东西价格是当前运载重量的平方乘距离,求买K<=10000个东西到达点E的最小代价. f[i,j]--到第i站不买第i ...
- 洛谷 P2616 [USACO10JAN]购买饲料II Buying Feed, II
洛谷 P2616 [USACO10JAN]购买饲料II Buying Feed, II https://www.luogu.org/problemnew/show/P2616 题目描述 Farmer ...
- 【P2616】 【USACO10JAN】购买饲料II Buying Feed, II
P2616 [USACO10JAN]购买饲料II Buying Feed, II 题目描述 Farmer John needs to travel to town to pick up K (1 &l ...
- [USACO10NOV]购买饲料Buying Feed 单调队列优化DP
题目描述 约翰开车来到镇上,他要带 KKK 吨饲料回家.运送饲料是需要花钱的,如果他的车上有 XXX 吨饲料,每公里就要花费 X2X^2X2 元,开车D公里就需要 D×X2D\times X^2D×X ...
- 2020: [Usaco2010 Jan]Buying Feed, II
2020: [Usaco2010 Jan]Buying Feed, II Time Limit: 3 Sec Memory Limit: 64 MBSubmit: 220 Solved: 162[ ...
- USACO Buying Feed, II
洛谷 P2616 [USACO10JAN]购买饲料II Buying Feed, II 洛谷传送门 JDOJ 2671: USACO 2010 Jan Silver 2.Buying Feed, II ...
- BUYING FEED
Problem F: F BUYING FEED Description Farmer John needs to travel to town to pick up K (1 <= K < ...
- ACM BUYING FEED
BUYING FEED 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 Farmer John needs to travel to town to pick up ...
- [BZOJ1618][Usaco2008 Nov]Buying Hay 购买干草
[BZOJ1618][Usaco2008 Nov]Buying Hay 购买干草 试题描述 约翰的干草库存已经告罄,他打算为奶牛们采购H(1≤H≤50000)磅干草. 他知道N(1≤N≤100)个干草 ...
随机推荐
- Tether USDT 节点钱包的安装与使用-omni layer
1 什么是Omni Layer Omni Layer是一种通信协议,它使用比特币区块链实现智能合约,用户货币和分散式点对点交换等功能. Omni Core是基于比特币核心代码库的快速,便携式Omni层 ...
- File类里的静态字段
我们都知道windows操作系统和Linux操作系统中的路径分隔符是不一样的,当我们直接使用绝对路径的时候,程序会报错误:No such file or diretory”的异常 File类有几个类似 ...
- 【NOIP 2018】填数游戏(思考与推导)
题目链接 这道题讲道理还是不错的,因为你需要不断挖掘其中的性质来帮助解题.可惜数据范围开在这里让考试时的我很慌,勉强也就写了$65$分就没了.回忆在考场上,思路是没有错的,就是发掘不够深入,思路还不够 ...
- 滥用基于资源约束委派来攻击Active Directory
0x00 前言 早在2018年3月前,我就开始了一场毫无意义的争论,以证明TrustedToAuthForDelegation属性是无意义的,并且可以在没有该属性的情况下实现“协议转换”.我相信,只要 ...
- 解题:NOIP 2018 保卫王国
题面 最小支配集=全集-最大独立集 所以先把点权改成正无穷/负无穷来保证强制选/不选某个点到独立集里,然后变成了洛谷的动态DP模板 GTMDNOIP2018ZTY #include<stack& ...
- bug4 导入新工程时报 Target runtime com.genuitec.runtime.generic.jee60 is not defined
系统加载工程后,报错Target runtime com.genuitec.runtime.generic.jee60 is not defined,在发布工程的同事电脑上正常.新导入的工程,出问题很 ...
- non-transactional
this.getHibernateTemplate().getSessionFactory().getCurrentSession().createQuery(queryString)报错No Hib ...
- Java实现POS打印机自定义无驱打印
Java实现POS打印机自定义无驱打印 热敏打印机使用越来越广泛,而安装驱动相当复杂,万幸的是,几乎所有的热敏打印机都支持ESC/P指令,参考网络上一些资料后,在此整理了一份自定义打印的方案 • 打印 ...
- Jenkins与Docker的自动化CI/CD实战
Jenkins与Docker的自动化CI/CD实战 互联网Java架构 2018-09-19 15:46:13 一.发布流程设计 工作流程: 开发人员提交代码到Git版本仓库:Jenkins人工/定时 ...
- 生成器python
一.列表生成式 需求:看列表[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],我要求你把列表里的每个值加1,你怎么实现?你可能会想到2种方式 >>> a [0, 1, 2 ...