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]表示在第i个地方,有j吨饲料:f[i][j]=f[i-1][k]+C[i-1]*(j-k)+j*(X[i]-x[i-1]),j-k≤F[i-1]。化简得f[i][j]=f[i-1][k]-C[i-1]*k+C[i-1]*j+j*(X[i]-x[i-1]),即对每个j找到最小的f[i-1][k]-C[i-1]*k,且满足j-k≤F[i-1],故可以用优先队列优化,使复杂度降低为O(nk)。

代码:

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 #include <queue>
 5 #define inc(i,j,k) for(int i=j;i<=k;i++)
 6 #define maxn 10010
 7 #define ll long long
 8 #define INF 1e16
 9 using namespace std;
10
11 inline int read(){
12     char ch=getchar(); int f=1,x=0;
13     while(ch<'0'||ch>'9'){if(ch=='-')f=-1; ch=getchar();}
14     while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
15     return f*x;
16 }
17 long long f[2][maxn]; int n,k,e,x,y,r;
18 struct nd{ll x,f,c;}nds[maxn]; bool cmp(nd a,nd b){return a.x<b.x;}
19 struct ddq{
20     deque<pair<ll,int> >dq;
21     void insert(ll x,int y){
22         while(!dq.empty()&&dq.back().first>=x)dq.pop_back(); dq.push_back(make_pair(x,y));
23     }
24     void erase(int y){
25         while(!dq.empty()&&dq.front().second<=y)dq.pop_front();
26     }
27 }ddq;
28 int main(){
29     k=read(); e=read(); n=read(); x=0; y=1; inc(i,1,n){nds[i].x=read(); nds[i].f=read(); nds[i].c=read();}
30     nds[++n]=(nd){e,0,0}; sort(nds+1,nds+n+1,cmp); inc(i,1,k)f[x][i]=INF; f[x][0]=0;
31     inc(i,2,n){
32         ddq.dq.clear(); r=0;
33         inc(j,0,k){
34             while(r<=j)ddq.insert(f[x][r]-r*nds[i-1].c,r),r++; ddq.erase(j-nds[i-1].f-1);
35             if(ddq.dq.empty())f[y][j]=INF;
36             else f[y][j]=ddq.dq.front().first+j*nds[i-1].c+j*j*(nds[i].x-nds[i-1].x);
37         }
38         swap(x,y);
39     }
40     printf("%lld",f[x][k]); return 0;
41 }

20161017

转载于:https://www.cnblogs.com/YuanZiming/p/5981993.html

bzoj2059[Usaco2010 Nov]Buying Feed 购买饲料*相关推荐

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

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

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

    首先我想吐槽的是题目并没有表明数据范围... 这个题目 DP方程并不难表示. dp[i][j]表示前i个地点携带了j个货物的最小花费 dp[i][j] = dp[i-1][k] + (j-k) * c ...

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

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

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

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

  5. 洛谷 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 ...

  6. Buying Feed, 2010 Nov (单调队列优化DP)

    约翰开车回家,又准备顺路买点饲料了(咦?为啥要说"又"字?)回家的路程一共有 E 公里, 这一路上会经过 K 家商店,第 i 家店里有 Fi 吨饲料,售价为每吨 Ci 元.约翰打算 ...

  7. 洛谷 P4544 [USACO10NOV]Buying Feed G)(单调队列优化DP)

    题目链接:P4544 [USACO10NOV]Buying Feed G 建议做这题前先做下这题P1886 滑动窗口 /[模板]单调队列 我们可以用dp[i][j]表示当前走到前i个点,已经买了j吨饲 ...

  8. NYOJ 248 BUYING FEED (贪心)

    BUYING FEED 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 Farmer John needs to travel to town to pick up K ...

  9. bzoj 1676: [Usaco2005 Feb]Feed Accounting 饲料计算(差分)

    1676: [Usaco2005 Feb]Feed Accounting 饲料计算 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 252  Solved ...

最新文章

  1. LIME:一种解释机器学习模型的方法
  2. UA OPTI512R 傅立叶光学导论16 Nyquist-Shannon采样定理
  3. MapReduce Java API实例-排序
  4. 解决SurfaceView渲染的各种疑难杂症
  5. 《ASP.NET Core 微服务实战》-- 读书笔记(第9章)
  6. Caffe中的卷积实现
  7. javascript 执行效率 java_有效提高JavaScript执行效率的几点知识
  8. JSOI2018冬令营游记总结(迁移自洛谷博客)
  9. VS2010中的sln,suo分别是什么含义
  10. Python 之 向上取整、向下取整以及四舍五入函数
  11. 服务端(Win server2012)+IIS管理器配置PHP服务器并部署网站讲解
  12. 非常全面详细的Sklearn介绍
  13. Gameplay框架
  14. 算数运算,逻辑运算,算术右移,逻辑右移
  15. 序列化版本号(serialVersionUID)是做什么用的
  16. CodeUp-1036 Problem B 镂空三角形
  17. xmanager5链接linux配置,xmanager连接linux5的方法
  18. JavaScript的callee 属性
  19. 控制工程/机器人SLAM/机器视觉/避障导航/求职笔记
  20. SC系列(SC-12S)低频率小型SMD石英晶振SC-12S32.768KHZ12.5PF/20PPM

热门文章

  1. python爬虫:get_text()等方法获取标签数据
  2. 【Three.js】关于Three.js的辅助库ststs.js报错的解决方案
  3. 我收集的网上公开的免费电子书
  4. 五笔字根表识别码图_精选五笔输入法拆字原则,值得收藏
  5. android短信照片换ios9,iOS9不越狱恢复短信和照片方法说明
  6. php自定义控件,小程序自定义组件的实现方法(代码)
  7. java web自定义监听器_Android自定义监听器Listener(自定义Java Callback回调事件)
  8. SpringBoot如何使用策略模式干掉if else
  9. jquery怎么获取radio的值
  10. 用Python防止头上一片青青草原