【USACO】又买饲料 单调队列dp
题目描述
输入
输出
• 单个整数:表示购买及运送饲料的最小费用
样例输入
样例输出
提示
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=,M=;
typedef long long ll;
struct node
{
ll x,w,v;
}a[N];
ll f[M],q[M],id[M];
bool comp(const node &p,const node &q){return p.x<q.x;}
int main()
{
int n,m,e;
scanf("%d%d%d",&m,&e,&n);
for(int i=;i<=n;i++)scanf("%lld%lld%lld",&a[i].x,&a[i].w,&a[i].v);
sort(a+,a+n+,comp);
for(int i=;i<=n;i++)a[i].x=e-a[i].x;
for(int i=;i<=m;i++)f[i]=2e16;
f[]=;
ll tmp;int l,r;
for(int i=;i<=n;i++)
{
l=r=;q[l]=;id[l]=;
for(int j=;j<=m;j++)
{
while(l<r && j-id[l]>a[i].w)l++;
tmp=f[j];
f[j]=min(f[j],q[l]+j*j*a[i].x+j*a[i].v);
while(l<=r && tmp-j*j*a[i].x-j*a[i].v<=q[r])r--;
q[++r]=tmp-j*j*a[i].x-j*a[i].v;id[r]=j;
}
}
printf("%lld\n",f[m]);
return ;
}
70分暴力动规:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=,M=;
const ll xy=2e15;
struct node
{
int w,v,x;
}a[N];
ll F[N][M];
bool comp(const node &p,const node &q){return p.x<q.x;}
int main()
{
freopen("pp.in","r",stdin);
int n,m,e;
scanf("%d%d%d",&m,&e,&n);
for(int i=;i<=n;i++)scanf("%d%d%d",&a[i].x,&a[i].w,&a[i].v);
a[++n].x=e;
sort(a+,a+n+,comp);
for(int i=;i<=n;i++)for(int j=;j<=m;j++)F[i][j]=xy;
F[][]=;
ll now;int tmp;
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
tmp=j-a[i].w>=?j-a[i].w:;
if(F[i-][tmp]==xy)break;
for(int k=tmp;k<=j;k++)
{
now=F[i-][k]+k*k*(a[i].x-a[i-].x)+a[i].v*(j-k);
if(now<F[i][j])F[i][j]=now;
}
}
}
printf("%lld\n",F[n][m]);
}
【USACO】又买饲料 单调队列dp的更多相关文章
- POJ 3017 单调队列dp
Cut the Sequence Time Limit: 2000MS Memory Limit: 131072K Total Submissions: 8764 Accepted: 2576 ...
- [TyvjP1313] [NOIP2010初赛]烽火传递(单调队列 + DP)
传送门 就是个单调队列+DP嘛. ——代码 #include <cstdio> ; , t = , ans = ~( << ); int q[MAXN], a[MAXN], f ...
- zstu 4237 马里奥的求救——(单调队列DP)
题目链接:http://oj.acm.zstu.edu.cn/JudgeOnline/problem.php?id=4237 这题可以转化为每次可以走g~d+x步,求最大分数,且最大分数的步数最少. ...
- 1304F2 - Animal Observation (hard version) 线段树or单调队列 +DP
1304F2 - Animal Observation (hard version) 线段树or单调队列 +DP 题意 用摄像机观察动物,有两个摄像机,一个可以放在奇数天,一个可以放在偶数天.摄像机在 ...
- 卖饲料——单调队列优化dp
题目描述 约翰开车来到镇上,他要带K吨饲料回家.运送饲料是需要花钱的,如果他的车上有X吨饲料,每公里就要花费X^2元,开车D公里就需要D* X^2元.约翰可以从N家商店购买饲料,所有商店都在一个坐标轴 ...
- BZOJ1855 [Scoi2010]股票交易[单调队列dp]
题 题面有点复杂,不概括了. 后面的状态有前面的最优解获得大致方向是dp.先是瞎想了个$f[i][j]$表示第$i$天手里有$j$张股票时最大收入(当天无所谓买不买). 然后写了一个$O(n^4)$状 ...
- 20152016-acmicpc-neerc-northern-subregional-contest J:Journey to the "The World's Start"(单调队列+DP+二分)
http://codeforces.com/gym/100801/attachments 题意:给出n-1张不同的票,票价分别为 pi,每张票每次最多可以坐 r 个站(1<=r<n),并且 ...
- vijos P1243 生产产品(单调队列+DP)
P1243生产产品 描述 在经过一段时间的经营后,dd_engi的OI商店不满足于从别的供货商那里购买产 品放上货架,而要开始自己生产产品了!产品的生产需要M个步骤,每一个步骤都可以在N台机器 ...
- POJ 1821 单调队列+dp
题目大意:有K个工人,有n个墙,现在要给墙涂色.然后每个工人坐在Si上,他能刷的最大范围是Li,且必须是一个连续子区间,而且必须过Si,他刷完后能获得Pi钱 思路:定义dp[i][j]表示前i个人,涂 ...
随机推荐
- C程序第二次作业
2-1删除字符串中数字字符 1.设计思路 (1)主要描述题目算法 第一步:遍历指针s所指的s数组. 第二步:如果 * (s+i)在0至9之间的话,则跳过此 * (s+i). 第三步:如果* (s+i) ...
- iOS中滤镜种类及相关介绍
- 《高级软件测试》云平台Jira的配置
首先点击进入以下网址: https://www.atlassian.com/ondemand/signup/form?product=jira-software.ondemand 填写好信息,Star ...
- Python 迭代器之列表解析与生成器
 [TOC] 1. 列表解析 1.1 列表解析基础 列表解析把任意一个表达式应用到一个迭代对象中的元素 Python内置ord函数会返回一个字符的ASCII整数编码(chr函数是它的逆过程, 它将A ...
- 再一次, 不要使用(include/require)_once
本文地址: http://www.laruence.com/2012/09/12/2765.html 最近关于apc.include_once_override的去留, 我们做了几次讨论, 这个APC ...
- 用Java语言实现简单的词法分析器
编译原理中的词法分析算是很重要的一个部分,原理比较简单,不过网上大部分都是用C语言或者C++来编写,笔者近期在学习Java,故用Java语言实现了简单的词法分析器. 要分析的代码段如下: 输出结果如下 ...
- mysql常用命令整理
#不压缩备份 mysqldump -u root -p userpassword databasename > /tmp/backupfile.sql #压缩备份 mysqldump -u ro ...
- mysql(3)—— 内连接、外连接的区别
先来看一下,内连接的语法: SELECT XXX FROM XXX INNER JOIN XXX ON XXX; 这里 INNER 可以省略,在上一篇博客中我们对于笛卡尔积现象的研究中(http:/ ...
- leetcode算法: Find Bottom Left Tree Value
leetcode算法: Find Bottom Left Tree ValueGiven a binary tree, find the leftmost value in the last row ...
- FPGA与MATLAB数据交互高效率验证算法——仿真阶段
之前博文是对基本设计技巧的总结和一些小设计随笔,内容有点杂,缺乏目的性.本来后续计划设计几个小项目,但导师的任务比较紧,所以为了提高效率,后续博客会涉及到很多算法方面的设计与验证的内容,主要关于OFD ...