博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 2059 [Usaco2010 Nov]Feed 购买饲料
阅读量:4952 次
发布时间:2019-06-12

本文共 1848 字,大约阅读时间需要 6 分钟。

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<=j-k<=F[i-1]。这样裸着做的话,复杂度是没法承受的,但如果把min{}里的j拿出来的话就会得到f[i][j]=min{f[i-1][k]-k*C[i-1]}+j*C[i-1]+j*j,这样min里面的只和k有关,而且k是要满足一定范围的,这时我们可以用单调队列来维护f[i-1][k]-k*C[i-1]的最小值,这样每次决策就是O(1)了。

#include
#include
#include
#define MAXN 510#define MAXK 10010#define INF 0x3f3f3f3f3f3f3f3flltypedef long long LL;struct Shop{ int x, c, f; bool operator < (const Shop &t) const { return x < t.x; }}shop[MAXN];int N, E, K, q[MAXN];LL f[MAXN][MAXK];void init(){ for(int i = 0; i < N; i ++) scanf("%d%d%d", &shop[i].x, &shop[i].f, &shop[i].c); std::sort(shop, shop + N);}void solve(){ for(int i = 0; i <= N; i ++) for(int j = 0; j <= K; j ++) f[i][j] = INF; f[0][0] = 0; shop[N].x = E; for(int i = 1; i <= N; i ++) { int front = 0, rear = 0; for(int j = 0; j <= K; j ++) { while(front < rear && j - q[front] > shop[i - 1].f) ++ front; if(f[i - 1][j] != INF) { while(front < rear) { int k = q[rear - 1]; if(f[i - 1][k] - (LL)k * shop[i - 1].c < f[i - 1][j] - (LL)j * shop[i - 1].c) break; -- rear; } q[rear ++] = j; } if(front < rear) { int k = q[front]; f[i][j] = f[i - 1][k] + (LL)(j - k) * shop[i - 1].c + (LL)j * j * (shop[i].x - shop[i - 1].x); } } } printf("%lld\n", f[N][K]);}int main(){ while(scanf("%d%d%d", &K, &E, &N) == 3) { init(); solve(); } return 0;}

 

 

转载于:https://www.cnblogs.com/staginner/archive/2012/10/11/2719681.html

你可能感兴趣的文章
webform中Repeater的Command用法、Repeater的替代方法
查看>>
Net学习日记_ADO.Net_1
查看>>
iOS开发-清理缓存功能的实现
查看>>
HTML中让表单input等文本框为只读不可编辑但可以获取value值的方法;让文本域前面的内容显示在左上角,居中...
查看>>
【第一届“文翁杯”现场竞技赛】T2 —蜀石经(优先队列模拟)
查看>>
【洛谷P5156】【USACO18DEC】—Sort It Out(Lis计数dp+贪心)
查看>>
C++引用
查看>>
Xamarin 使用极光推送 详细教程
查看>>
Ubuntu 挂载机器硬盘命令
查看>>
ガリレオの苦悩 攪乱す 1
查看>>
Django[基础知识]
查看>>
PHP中使用CURL实现GET和POST请求
查看>>
解决windows下Composer因php_openssl扩展缺失而安装失败的问题
查看>>
BFC
查看>>
备忘录团队选题报告
查看>>
用gcc编译成可执行程序 (转)
查看>>
微服务那些事--笔记
查看>>
Python 异常处理
查看>>
平衡树treap的基本操作
查看>>
关于PHP 缓冲区
查看>>