【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)个干草 ...
随机推荐
- ql Server 2012完全卸载方法
第一步,在控制面板里面找到程序——卸载程序这一项,打开之后就会是这样的了 第二步,经过第一步打开卸载程序后,在里面找到Microsoft SQLserver 2012 (64-bit)这一项,可以通过 ...
- Entity Framework(EF) Code First将实体中的string属性映射成text类型的几种方式
1.通过ColumnType属性设置 [Column(TypeName="text")] public string Text { get; set; } 在进行以上属性设置时,请 ...
- 去除百度搜索结果中的广告的 js 代码
在百度页面下控制台里执行如下代码, 然后关掉控制台 setInterval(() => { try{ Array.from( document.querySelectorAll('#conten ...
- 51Nod 1287 加农炮 (线段树)
1287 加农炮 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 一个长度为M的正整数数组A,表示从左向右的地形高度 ...
- 使用 docker 创建自己的镜像
docker run 命令 镜像(image):An image is a filesystem and parameters to use at runtime. It doesn't have s ...
- bzoj3920: Yuuna的礼物(莫队+分块套分块)
思路挺简单的,但是总感觉好难写...码力还是差劲,最后写出来也挺丑的 这题显然是个莫队题,考虑怎么转移和询问... 根据莫队修改多查询少的特点,一般用修改快查询慢的分块来维护.查第$k_1$小的出现次 ...
- spring in action 学习笔记八:用@Primary 或者@Qualifier消除@Autowired引起的歧义现象
首先解释一下@Primary和@Qualifier这两个注解的意思:@Primary的意思是在众多相同的bean中,优先使用用@Primary注解的bean.而@Qualifier这个注解则指定某个b ...
- java基础-网络编程(Socket)技术选型入门之NIO技术
java基础-网络编程(Socket)技术选型入门之NIO技术 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传统的网络编程 1>.编写socket通信的MyServer ...
- DNA序列编码中Hairpin的定义和计算
DNA序列编码中Hairpin的定义和计算 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 [1] 张凯. DNA计算核酸编码优化及算法设计[D]. 2008. [2] Shin, ...
- bzoj千题计划211:bzoj1996: [Hnoi2010]chorus 合唱队
http://www.lydsy.com/JudgeOnline/problem.php?id=1996 f[i][j][0/1] 表示已经排出队形中的[i,j],最后一个插入的人在[i,j]的i或j ...