首先我想吐槽的是题目并没有表明数据范围。。。

这个题目 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)

所以我们需要优化一下,可以发现式子可以化简为:

dp[i][j] = dp[i-1][k] - k * cost  + j*j*(leng[i]-leng[i-1]) +  j*cost

dp[i][j] = dp[i-1][k] - k * cost 这一部分可以只是与k有关,这里我们可以用单调队列进行优化,使其保持 最小值。

坑点1:注意数据范围

坑点2:注意初始化

/**************************************************************Problem: 2059User: LYFerLanguage: C++Result: AcceptedTime:480 msMemory:61600 kb
****************************************************************/#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <queue>#define mp(a,b) make_pair(a,b)
#define fr(a,b,c) for(int c=a;c<=b;++c)using namespace std;
typedef long long ll;const ll INF = 1e16;
ll dp[777][10005];
int n,e,k;inline int Read(){int ans = 0, flag = 1;char ch = getchar();while(ch < '0' || ch > '9'){if(ch=='-') flag=-1;ch = getchar();}while(ch >= '0' && ch <= '9'){ans = ans * 10 + ch - '0';ch = getchar();}return ans * flag;
}struct task{ll now,num,cost;bool operator <(const task &x) const{return now < x.now;}
}feed[505];struct DanDiao{deque< pair<ll,int> >Q;void insert(ll x,int y){while( !Q.empty() && Q.back().first >= x) Q.pop_back();Q.push_back( mp(x,y) );}void erase(int y){while( !Q.empty() && Q.front().second <= y) Q.pop_front();}
}DD;int main(){k = Read();e = Read();n = Read();fr(1,n,i){feed[i].now = Read();feed[i].num = Read();feed[i].cost = Read();}sort(feed+1,feed+1+n);feed[++n] = (task){e,0,0};for(int i=0;i<=n;i++){for(int j=0;j<=k;j++){dp[i][j] = INF;}}dp[1][0] = 0;fr(2,n,i){DD.Q.clear();int r = 0;fr(0,k,j){while(r <= j) DD.insert(dp[i-1][r] - r*feed[i-1].cost , r) , r++;DD.erase(j - feed[i-1].num - 1);if( DD.Q.empty()) dp[i][j] = INF;else dp[i][j] = DD.Q.front().first+j*feed[i-1].cost+j*j*(feed[i].now-feed[i-1].now);}}/*for(int i=1;i<=n;i++){for(int j=0;j<=k;j++){printf("dp[%d][%d]:%d\n",i,j,dp[i][j]);}}*/printf("%lld\n",dp[n][k]);return 0;
}

AC代码

转载于:https://www.cnblogs.com/OIerLYF/p/7601218.html

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

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

    bzoj2059[Usaco2010 Nov]Buying Feed 购买饲料 题意: 约翰开车来到镇上,他要带K吨饲料回家.如果他的车上有X吨饲料,每公里就要花费X^2元,开车D公里就需要D* X^ ...

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

    数轴上n<=500个站可以买东西,每个站位置Xi,库存Fi,价格Ci,运东西价格是当前运载重量的平方乘距离,求买K<=10000个东西到达点E的最小代价. f[i,j]--到第i站不买第i ...

  3. bzoj 1618: [Usaco2008 Nov]Buying Hay 购买干草(完全背包)

    1618: [Usaco2008 Nov]Buying Hay 购买干草 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1196  Solved: 62 ...

  4. bzoj2020[Usaco2010 Jan]Buying Feed, II*

    bzoj2020[Usaco2010 Jan]Buying Feed, II 题意: FJ开车去买食物,如果他的车上有X份食物.每走一里就花费X元. 城市总共E里路,FJ从0开始走,到E结束(不能往回 ...

  5. [luogu 4292][bzoj 1758][WC2010] 重建计划(点分治 + dp + 单调队列优化 + 启发式合并)

    [WC2010]重建计划 problem solution code problem 洛谷指路 solution 一看那个道路平均价值的式子:AvgValue=∑e∈Sv(e)∣S∣\text{Avg ...

  6. BZOJ 2448: 挖油-区间DP+单调队列

    题意: [0,x]中全是1,判断[1,n]中的点i中是0还是1需要权值aiaia_i,最坏情况下求得到x的最小权值 n<=2000n<=2000n Solution: f[i][j]f[i ...

  7. cactus仙人掌图【仙人掌圆方树+树形DP+单调队列】

    题目链接 BZOJ 1023 首先,圆方树是比较好想到的,维护直径,我们最方便的做法就是先让它变成一棵树,这里因为是仙人掌图,所以就用圆方树来构建. 再者,就是维护直径了,比较好想到的是非环上结点,就 ...

  8. URAL 1427. SMS(DP+单调队列)

    题目链接 我用的比较传统的办法...单调队列优化了一下,写的有点搓,不管怎样过了...两个单调队列,存两个东西,预处理一个标记数组存... 1 #include <iostream> 2 ...

  9. POJ 3017 DP + 单调队列 + 堆

    题意:给你一个长度为n的数列,你需要把这个数列分成几段,每段的和不超过m,问各段的最大值之和的最小值是多少? 思路:dp方程如下:设dp[i]为把前i个数分成合法的若干段最大值的最小值是多少.dp转移 ...

最新文章

  1. vs2010下release版本调试设置
  2. 著名投资人Chris Dixon:计算的下一波浪潮是什么?
  3. json key 命名规范_jsonapi
  4. 光栅衍射主极大个数_光栅的分类及常规指标介绍
  5. Spring 自定义注解使用案例 首先创建一个注解@interface
  6. 动态规划,分治,回溯法,全排列,切片
  7. hive提交命令org.apache.hadoop.yarn.exceptions.YarnRuntimeException: Error parsing application ID:
  8. [2020.11.27NOIP模拟赛]中位数之中位数【二分,树状数组】
  9. OSGI(面向Java的动态模型系统)
  10. android sdk64位资源,android SDK 有32位或64位的分别吗
  11. Spring 实践 -AOP
  12. Visual Studio 剪切板新特性
  13. redis怎么不让存byte_Redis 删除数据后不能自动释放内存么?
  14. sqlserver isnull函数使用
  15. UpdateProgress使用,出不来特效问题小结
  16. MYSQL--主键 外键
  17. 戴尔linux系统改win7,戴尔一体机win10改win7系统及bios设置教程(支持8代cpu)
  18. SF中对象发出消息后在chatter上显示名字的问题
  19. LabVIEW在模拟输入通道上同时使用差动(Differential)和RSE(ReferencedSingle Ended)作读取
  20. geojson和topojson数据格式

热门文章

  1. mysql单单写join_MySQL系列之Join大法
  2. win10一直正在检查更新_教你win10升级更新失败怎么办
  3. 疯子的算法总结(八) 最短路算法+模板
  4. Github上传代码指南(Window版,同样适合Linux版)
  5. 如何更改ubuntu的用户密码
  6. 【自动驾驶-Autonomous】自动驾驶定义
  7. Spring Boot中使用多数据库
  8. pycharm上传代码到github
  9. nlp文本相似度_用几行代码在Python中搜索相似文本:一个NLP项目
  10. 单片机小白学步系列(四) 模拟电路、传统数字电路与单片机