[HNOI2005]星际贸易
https://www.zybuluo.com/ysner/note/1309789
题面
解析
如果要求贸易额最大,就相当于:
有\(n\)个物品(星球),每个物品价值为\(v_i\)(每个星球能卖\(v_i\)),现装入一个体积为\(m\)(载重量为\(m\))的背包,最大化装入物品体积之和。
一个裸背包\(DP\)即可解决第一问。
并且我们可以顺手得出,达到该贸易额,必须要停靠哪些站。
(当然,为了维护和加油,应该还需要停靠另外一些站)
接下来要求利润最大,就是要求加油与维修的费用最少。
由于\(n\leq2000\),所以状态只能设两维:
\(f[i][j]\)表示到第\(i\)个星球时油量为\(j\)的最小花费。
相关转移:
加油:直接\(f[i][j-1]->f[i][j]\)即可。
维护:从前面停靠了的站转移过来(枚到最近那个必须停靠的星球就行)。
这样好像是\(O(n^3)\)的。。。
然后膜了一发\(yyb\),发现维护的转移过程可以用单调队列优化(先尾后进后首)。
很有道理啊。
于是就做完了。
复杂度\(O(n^2)\)。
细节问题:\(m,R\)混用、背包转移不全、单调队列入出队条件设错(应该以当前\(DP\)值为参照,而不是队列内)。
#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<vector>
#define ll long long
#define re register
#define il inline
#define fp(i,a,b) for(re int i=a;i<=b;++i)
#define fq(i,a,b) for(re int i=a;i>=b;--i)
using namespace std;
const int N=2500;
int n,m,V,len,A[N],B[N],L[N],P[N],F[N],dp[N][N<<1],pos,ans1,ans2,Q[N<<1][N],h[N<<1],t[N<<1];
bool vis[N];
il int gi()
{
re int x=0,t=1;
re char ch=getchar();
while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();
if(ch=='-') t=-1,ch=getchar();
while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
return x*t;
}
il int max(re int x,re int y){return x>y?x:y;}
il int min(re int x,re int y){return x<y?x:y;}
int main()
{
n=gi();m=gi();V=min(gi(),2*n);len=gi();
fp(i,1,n)
{
A[i]=gi();B[i]=gi();L[i]=gi();P[i]=gi();F[i]=gi();
if(L[i]-L[i-1]>len) return puts("Poor Coke!"),0;
}
memset(dp,-63,sizeof(dp));dp[0][0]=0;
fp(i,1,n)
fp(j,0,m)
{
if(j>=A[i]) dp[i][j]=max(dp[i][j],dp[i-1][j-A[i]]+B[i]);
dp[i][j]=max(dp[i][j],dp[i-1][j]);
}
fp(i,1,m) if(dp[n][pos]<dp[n][i]) pos=i;
ans1=dp[n][pos];
fq(i,n,1) if(dp[i][pos]!=dp[i-1][pos]) vis[i]=1,pos-=A[i];
memset(dp,63,sizeof(dp));dp[0][V]=0;Q[V][t[V]++]=0;
fp(i,1,n)
fp(j,0,V)
{
if(P[i]&&j) dp[i][j]=min(dp[i][j],dp[i][j-1]+P[i]);
if(h[j+2]<t[j+2]) dp[i][j]=min(dp[i][j],dp[Q[j+2][h[j+2]]][j+2]+F[i]);
if(vis[i]) h[j]=t[j]=0;//can't avoid
while(h[j]<t[j]&&dp[Q[j][t[j]-1]][j]>=dp[i][j]) --t[j];
Q[j][t[j]++]=i;
while(h[j]<t[j]&&L[i+1]-L[Q[j][h[j]]]>len) ++h[j];
}
pos=0;
fp(i,1,V) if(dp[n][i]<dp[n][pos]) pos=i;
ans2=dp[n][pos];
if(ans2>1e9) return puts("Poor Coke!"),0;
printf("%d %d\n",ans1,ans1-ans2);
return 0;
}
[HNOI2005]星际贸易的更多相关文章
- 洛谷 P2317 [HNOI2005]星际贸易 解题报告
P2317 [HNOI2005]星际贸易 题目描述 输入输出格式 输入格式: 输出格式: 如果可以找到这样的方案,那么输出文件output.txt中包含两个整数X和Y.X表示贸易额,Y表示净利润并且两 ...
- 【BZOJ1205】[HNOI2005]星际贸易(动态规划)
[BZOJ1205][HNOI2005]星际贸易(动态规划) 题面 BZOJ 洛谷 题解 第一问就是一个裸\(dp\),因为什么都不用考虑... 所以设\(f[i][j]\)表示当前停靠在第\(i\) ...
- bzoj1205: [HNOI2005]星际贸易
题目链接 bzoj1205: [HNOI2005]星际贸易 题解 辣鸡题面,毁我青春 辣鸡题面,毁我青 辣鸡题面,毁我 辣鸡题面,毁 第一问,背包dp 第二问 问题转化为在一个序列上经过好多点走到终点 ...
- [luogu2317 HNOI2005] 星际贸易 (dp)
传送门 Solution 两个dp分开处理, 第一问什么都不考虑直接dp 第二问还有些疑惑,姑且先留坑 Code //By Menteur_Hxy #include <cstdio> #i ...
- 【简●解】[HNOI2005]星际贸易
[大意] 太多了,懒得打,贴\(LG\)的图了... [分析] 开始拿到这道题有点慌:怎么限制条件这么多,再读读题. 注意一个东西,就是贸易额与费用是独立分开的,并且题目保证只有一种方案获得最大贸易额 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- cyyz: Day 4 网络流整理
Day 4 网络流的理论性知识(算了..我自己都看不下去,还是整理些例题以后复习用吧qaq): 一.PPT(主要内容) 二.搜自度娘 定义: 年,L.R. 福特和 D.R. 富尔克森等人给出了解决 ...
- 51nod1773 A国的贸易
基准时间限制:2 秒 空间限制:524288 KB 分值: 40 A国是一个神奇的国家. 这个国家有 2n 个城市,每个城市都有一个独一无二的编号 ,编号范围为0~2n-1. A国的神奇体现在,他们 ...
- BZOJ 1927: [Sdoi2010]星际竞速
1927: [Sdoi2010]星际竞速 Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 2051 Solved: 1263[Submit][Stat ...
随机推荐
- uva 327 - Evaluating Simple C Expressions
Evaluating Simple C Expressions The task in this problem is to evaluate a sequence of simple C exp ...
- Android Studio + Genymotion模拟器安装与配置
一.Android studio 下载与安装 https://developer.android.google.cn/studio/index.html 进入谷歌官方链接下载Android studi ...
- 【转载】Raft 为什么是更易理解的分布式一致性算法
一致性问题可以算是分布式领域的一个圣殿级问题了,关于它的研究可以回溯到几十年前. 拜占庭将军问题 Leslie Lamport 在三十多年前发表的论文<拜占庭将军问题>(参考[1]). 拜 ...
- java 编码乱码问题
Tomcat的server.xml 文件Connector标签加上URIEncoding="utf-8": <Connector port=" protocol=& ...
- 管理Cookie和Session
管理Cookie和Session 前言 这几天中,一直再跟漏洞打交道,而在这些漏洞中,出现的最多的就是 Cookie 和 Session 了.这篇文章就简单的介绍一些 Cookie 中最常用的四个属性 ...
- HDU 4948 (傻比图论)
Kingdom Problem Description Teacher Mai has a kingdom consisting of n cities. He has planned the tra ...
- [K/3Cloud] 调用其他界面时通过Session传递对象参数
DynamicFormShowParameter参数的CustomParams参数列表只支持string类型的参数,对于复杂参数的传递需要通过单据View对象的共享Session来完成,如: 在调用界 ...
- NOIP2015提高组D1T3 斗地主
问一副排n张,n<=23最少打几次打完,数据组数T<=100. 面向数据编程.. 前30分:乱暴力?没有顺子,把单.对子.炸弹.三张.王炸.三带一判一次即可. 前70分:状压,先预处理哪些 ...
- hdu - 1172 猜数字 (思维题)
http://acm.hdu.edu.cn/showproblem.php?pid=1172 这个题换一种想法,可以找出四位数中所有满足条件的数看是否只有一个. #include <iostre ...
- DELPHI、FLASH、AS3、FLEX使用Protobuf(google Protocol Buffers)的具体方法
最近因为工作需要,需要在不同的开发环境中应用Protobuf,特此,我专门研究了一下.为了防止自己忘记这些事情,现在记录在这里!需要的朋友可以借鉴一些,因为这些东西在GOOGLE和百度上搜索起来真的很 ...