题目链接

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. javascript中的this到底指什么?

    来自百度知道解释 JavaScript:this是什么? 定义:this是包含它的函数作为方法被调用时所属的对象.说明:这句话有点咬嘴,但一个多余的字也没有,定义非常准确,我们可以分3部分来理解它!1 ...

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

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

  3. 分布式监控工具Ganglia 介绍 与 集群部署.

    如果你目的很明确就是冲着标题来的,不爱看我唠叨,请直接进入第二个分割线之后的内容. 其实之前就是有做Swift监控平台的打算的,但是因为没什么硬性需求么,也不要紧的,就一直搁置了.最近实验室来了个大二 ...

  4. PHP复制文件夹及文件夹内的文件

    //1.取被复制的文件夹的名字://2.写出新的文件夹的名字://3.调用此函数,将旧.新文件夹名字作为参数传递://4.如需复制文件夹内的文件,第三个参数传1,否则传0: public functi ...

  5. 如何提升mysql replication的性能&amp;多线程传输二进制日志

    1,最好使用内网或者专线链路传输binlog数据 (千兆网卡.还不够的话,bounding 技术,扩展带宽) 在my.cnf中强制使用内网ip传输数据bind-address=ip2,将二进制保存在独 ...

  6. Linux驱动中completion接口浅析(wait_for_complete例子,很好)

    completion是一种轻量级的机制,它允许一个线程告诉另一个线程工作已经完成.可以利用下面的宏静态创建completion:                          DECLARE_CO ...

  7. express中间件代理实现跨域

    前端代码 var xhr = new XMLHttpRequest(); xhr.open('post', 'http://localhost:3000', true); xhr.onreadysta ...

  8. Linux入门——文件系统目录结构

    不同操作系统对于文件系统的组织是不一样的,当前主流的两大类操作系统windows和Linux它们在文件系统组织方式上有很大差别.windows的文件系统是以驱动器盘符为基础,这样文件是挂载在分区上的, ...

  9. Python 爬虫入门之爬取妹子图

    Python 爬虫入门之爬取妹子图 来源:李英杰  链接: https://segmentfault.com/a/1190000015798452 听说你写代码没动力?本文就给你动力,爬取妹子图.如果 ...

  10. InnoDB master thread工作原理

    我们简单交流下InnoDB master thread学习,有兴趣的朋友可以参考<<MySQL技术内蒙--InnoDB存储引擎第二版>> void master_thread( ...