题目链接

bzoj1205: [HNOI2005]星际贸易

题解

辣鸡题面,毁我青春

辣鸡题面,毁我青

辣鸡题面,毁我

辣鸡题面,毁

第一问,背包dp

第二问

问题转化为在一个序列上经过好多点走到终点,

符合各项条件的情况下费用最小,其中有某些点必须经过。

g[u][fu]表示将要离开点u而还没有离开的时候有fu个燃料。

得到g[u][fu]=min(g[u][fu-1]+p[u],g[v][fu+2]) 、

复杂度n^3

单调队列维护fu相同时g[fu][v]的最小值

n^2

代码

#include<bits/stdc++.h>
using namespace std;
inline int read() {
int x = 0,f = 1;
char c = getchar();
while(c < '0' || c > '9'){if(c == '-')f = - 1; c = getchar();}
while(c <= '9' && c >= '0')x = x * 10 + c - '0',c= getchar();
return x * f;
}
const int maxn = 2007;
int n,m,r,l0; //m max afford // r : 最大燃料量,//l0 不做维护飞的最大距离
int a[maxn],l[maxn],p[maxn],c[maxn],f[maxn][maxn * 2];
int g[maxn][maxn * 2];
bool ch[maxn][maxn];
int q[maxn ][maxn] ,h[maxn],t[maxn];
const int INF = 1e9;
bool must[maxn]; int solve() {
memset(g,0x3f,sizeof g);
memset(t,-1,sizeof t);
q[r][t[r] = 0] = g[0][r] = 0 ;
for(int u = 1;u <= n;++ u)
for(int fu = 0;fu <= r;++ fu) {
if(fu > 0 && p[u]) g[u][fu] = min(g[u][fu],g[u][fu- 1] + p[u]);
int k = fu + 2;
if(k <= r) { while(h[k] <= t[k] && l[u] - l[q[k][h[k]]] > l0) h[k] ++;
if(h[k] <= t[k]) g[u][fu] = std::min(g[u][fu],g[q[k][h[k]]][k] + c[u]);
}
while(h[fu] <= t[fu] && g[u][fu] < g[q[fu][t[fu]]][fu]) t[fu] --;
if(must[u]) t[fu] = h[fu] - 1;
q[fu][++ t[fu]] = u;
}
int ret = INF;
for(int i = 0;i <= r;++ i) ret = std::min(ret,g[n][i]);
return ret;
}
void get(int i,int j) {
if(! i ) return ;
if(ch[i][j]) must[i] = true , get(i - 1,j - a[i]);
else get(i - 1,j) ;
}
int main() {
n = read(),m = read(),r = read(),l0 = read();
r = std::min(r,2 * n);
for(int b,i = 1;i <= n;++ i) {
a[i] = read(),b = read(),l[i] = read(),p[i] = read(),c[i] = read();
for(int j = m;j >= 0;-- j) {
f[i][j] = f[i - 1][j];
if(j >= a[i] && f[i - 1][j - a[i]] + b > f[i][j]) {
f[i][j] = f[i - 1][j - a[i]] + b;
ch[i][j] = 1;
}
}
}
get(n,m);
int ned = solve();
if(ned >= INF) puts("Poor Coke!");
else printf("%d %d\n",f[n][m],f[n][m] - ned);
return 0;
}

bzoj1205: [HNOI2005]星际贸易的更多相关文章

  1. 【BZOJ1205】[HNOI2005]星际贸易(动态规划)

    [BZOJ1205][HNOI2005]星际贸易(动态规划) 题面 BZOJ 洛谷 题解 第一问就是一个裸\(dp\),因为什么都不用考虑... 所以设\(f[i][j]\)表示当前停靠在第\(i\) ...

  2. 洛谷 P2317 [HNOI2005]星际贸易 解题报告

    P2317 [HNOI2005]星际贸易 题目描述 输入输出格式 输入格式: 输出格式: 如果可以找到这样的方案,那么输出文件output.txt中包含两个整数X和Y.X表示贸易额,Y表示净利润并且两 ...

  3. [HNOI2005]星际贸易

    https://www.zybuluo.com/ysner/note/1309789 题面 要素太多,还是自己看吧 解析 如果要求贸易额最大,就相当于: 有\(n\)个物品(星球),每个物品价值为\( ...

  4. [luogu2317 HNOI2005] 星际贸易 (dp)

    传送门 Solution 两个dp分开处理, 第一问什么都不考虑直接dp 第二问还有些疑惑,姑且先留坑 Code //By Menteur_Hxy #include <cstdio> #i ...

  5. 【简●解】[HNOI2005]星际贸易

    [大意] 太多了,懒得打,贴\(LG\)的图了... [分析] 开始拿到这道题有点慌:怎么限制条件这么多,再读读题. 注意一个东西,就是贸易额与费用是独立分开的,并且题目保证只有一种方案获得最大贸易额 ...

  6. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  7. cyyz: Day 4 网络流整理

    Day 4 网络流的理论性知识(算了..我自己都看不下去,还是整理些例题以后复习用吧qaq): 一.PPT(主要内容)   二.搜自度娘 定义: 年,L.R. 福特和 D.R. 富尔克森等人给出了解决 ...

  8. 51nod1773 A国的贸易

    基准时间限制:2 秒 空间限制:524288 KB 分值: 40  A国是一个神奇的国家. 这个国家有 2n 个城市,每个城市都有一个独一无二的编号 ,编号范围为0~2n-1. A国的神奇体现在,他们 ...

  9. BZOJ 1927: [Sdoi2010]星际竞速

    1927: [Sdoi2010]星际竞速 Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 2051  Solved: 1263[Submit][Stat ...

随机推荐

  1. Spark记录-SparkSQL

    Spark SQL的一个用途是执行SQL查询.Spark SQL也可以用来从现有的Hive安装中读取数据.有关如何配置此功能的更多信息,请参阅Hive表部分.从另一种编程语言中运行SQL时,结果将作为 ...

  2. JIRA项目管理搭建

    部署JIRA 7.2.2 for Linux 转自:http://www.yfshare.vip/2017/05/09/%E9%83%A8%E7%BD%B2JIRA-7-2-2-for-Linux/ ...

  3. 【Linux】MySQL安装及允许远程访问

    安装环境/工具  Linux( centOS 版) MySQL(MySQL-5.6.28-1.el7.x86_64.rpm-bundle.tar版) 安装步骤 1.解压mysql安装文件 命令:tar ...

  4. java注解 @SuppressWarnings注解用法

    @SuppressWarnings注解用法 @SuppressWarnings注解主要用在取消一些编译器产生的警告对代码工具左侧行列提示,但这种警告可以通过注释类型声明来取消 @SuppressWar ...

  5. python 基础部分重点复习整理--从意识那天开始进阶--已结

    pythonic 风格编码 入门python好博客 进阶大纲 有趣的灵魂 老齐的教程 老齐还整理了很多精华 听说 fluent python + pro python 这两本书还不错! 元组三种遍历, ...

  6. [转载]微软VS2015支持Android和iOS编程

    Visual Studio 2015 Preview http://www.zhihu.com/question/26594936/answer/33397319 http://www.visuals ...

  7. Flex 笔记整理 三

    1. Panel, TitleWindow PopUpManager 透明 用一个类,这个类里引用一个组件, P如 Panel, TitleWindow等, 利用PopUpManager来弹出显示.  ...

  8. python版本管理工具pyenv和包管理工具pipenv

    一.pyenv版本管理工具 pyenv是一个python版本管理工具,可以实现轻松切换多个python版本 它可根据每个用户更改全局python版本,也可以为每个项目指定python版本,还可以管理v ...

  9. 新手学习爬虫之创建第一个完整的scrapy工程-糗事百科

    创建第一个scrapy工程-糗事百科 最近不少小伙伴儿,问我关于scrapy如何设置headers的问题,时间久了不怎么用,还真有的忘,全靠记忆去写了,为了方便大家参考,也方便我以后的查阅,这篇文章就 ...

  10. MySQL乱码问题以及utf8mb4字符集

    MySQL乱码问题以及utf8mb4字符集 1.乱码 推荐大家看 深入MySQL字符集设置 ,区分检查client端.server端的编码:最简单暴力的方式,是在所有的环节都显式明确的指定相同的编码, ...