这个题非常繁琐,而且网上的题解非常不详细。。

首先第一问

由于所有的点都要走到,所以就是01背包

需要可持久化背包来输出方案。。类似floyd的判断方式

然后这些选定的点都一定是要维护的,

第二问就是枚举每个点+每个点的加速器数量 来 dp

然后n^4的dp就是从1到n枚举i,从1到i枚举j,从0到r枚举j的加速器个数k   ,从0到r枚举i的加速器个数l,然后转移

然后可以优化 ,由于对于   枚举的每一个j   当k相同的时候只从j中选最优的更新 ,只要 求i对于每个k的前面的最优值即可,可以证明这是贪心取,(只要合法,就去花费最小的)

然后就顺带出一个类似飞扬的小鸟的更新方法,同级更新,一直选择最优的往上买,,

对于买加速器的情况就变成O(1)的顺带转移了

码:

#include<iostream>
#include<cstdio>
using namespace std;
int n,m,r,l0,k,v[4002],ans1,ans2=1000000009,c[4002],l[4002],p[4002],wh[4002],i,j,f[4003][4003],q[5003][5003],z1[5003],z2[5003];
bool bj[4002];
int main()
{scanf("%d%d%d%d",&n,&m,&r,&l0);r=min(r,n*2);for(i=1;i<=n;i++){scanf("%d%d%d%d%d",&c[i],&v[i],&l[i],&p[i],&wh[i]);     }for(i=1;i<=m;i++)for(j=1;j<=n;j++)f[j][i]=-1000000009;f[0][0]=0;for(j=1;j<=n;j++){for(i=m;i>=0;i--){f[j][i]=f[j-1][i];if(i>m-c[j])continue;if(f[j][i+c[j]]<f[j-1][i]+v[j]){f[j][i+c[j]]=f[j-1][i]+v[j];            if(f[j][i+c[j]]>ans1){ans1=f[j][i+c[j]];ans2=i+c[j];}}   }       }int lin=ans1,lin2=ans2;
if(lin2<1000000009)  for(i=n;i>=1;i--){if(lin2-c[i]>=0&&f[i-1][lin2-c[i]]+v[i]==lin){bj[i]=1;    lin=f[i-1][lin2-c[i]];lin2=lin2-c[i];}           }//ans1=f[ans1][0];for(i=0;i<=n;i++)for(j=0;j<=r+2;j++)f[i][j]=1000000009,z2[j]=-1;ans2=1000000009;f[0][r]=0;q[r][++z2[r]]=0;for(i=1;i<=n;i++){for(j=2;j<=r+2;j++)//枚举上一个更新这一个 {if(j!=2&&p[i]>0)f[i][j-2]=f[i][j-3]+p[i];while(z1[j]<=z2[j]&&(l[i]-l[q[j][z1[j]]]>l0))z1[j]++;if(j<=r){int l1=l[i]-l[q[j][z1[j]]];if(l0>=l1)if(f[i][j-2]>f[q[j][z1[j]]][j]) f[i][j-2]=f[q[j][z1[j]]][j];   }while(z1[j-2]<=z2[j-2]&&l[i]-l[q[j-2][z1[j-2]]]>l0)z1[j-2]++;if(bj[i])while(z2[j-2]>=z1[j-2])z1[j-2]++;while(z1[j-2]<=z2[j-2]&&f[i][j-2]+wh[i]<f[q[j-2][z2[j-2]]][j-2])z2[j-2]--;q[j-2][++z2[j-2]]=i;}for(j=0;j<=r;j++)f[i][j]+=wh[i]; }for(i=0;i<=r;i++)if(f[n][i]<ans2)ans2=f[n][i];if(ans2<1000000009)printf("%d %d",ans1,ans1-ans2);   else printf("Poor Coke!");
}

2017.10.26 星际贸易 思考记录相关推荐

  1. 2017.10.29 染色方案 思考记录

    这个题数据特别小,于是想到状压多维之流. 状压是比较麻烦的,虽然也能写,但多维dp明显要好写一些 根据15去设计状态是没有前途的,因为按颜色分一定会MLE 这时就考虑根据5分,这样不同颜色就离散了,就 ...

  2. 2017.10.24 上升序列 思考记录

    终于有会做的题了... 一开始想用正常的lis ,然后从前往后扫, 由于最优查询区间在序列上是按顺序单调递增的,所以想记录每个点取哪个值跳到哪,这样是n*m logn的 然后发现既然是单调递增的那直接 ...

  3. 2017.10.9 放棋子 思考记录

    .这个题根本没想到错排,但它似乎离散为斜对角之后很有规律,于是打表,推出了式子... 经常手玩式子,前几天的测试根本没想到卡特兰数然后用组合数硬生生凑了出来,然后这个题的错排.. f表示答案  g表示 ...

  4. 2017.10.7 括号序列 思考记录

    这个题看起来很简单,但细节比较麻烦.参考完别人的代码后才想出自己的解法的.. 一开始认为已匹配的括号是可以直接消的,所以就只维护了两个变量 但还有区间取反.. 由于和已配对的括号的顺序有关,所以不是很 ...

  5. 2017.10.30 覆盖问题 思考记录

    从细节入手已经从一种技巧变成一种策略了. 题目给出的条件很奇怪,是3个正方形,, 为什么是3个而不是4个或2个呢.. 于是先用一个大矩形把所有点卡住 然后显然矩形的每个边 都有一个正方形和他在一条直线 ...

  6. 2017.10.29 软件安装 思考记录

    这个题一开始卡了,,就是树内的必选和可选分不太清 ,其实很好分,对于一个子树,根是必选,子节点是可选 然后递归保证正确性 可选就是把每个花费都看成一个物品往里背包 注: 1.必选<c[o]的要清 ...

  7. 2017.10.25 打鼹鼠 思考记录

    挺直白的dp 离散的是移动的过程,因为经过一番移动一定是为了出现在某个地点 所以直接m^2枚举,类似lis的转移即可 码: #include<iostream> #include<c ...

  8. 2017.10.19 大陆争霸 思考记录

    一上来想到拓扑分层最短路,但需要多源最短路.. 这题考查的是对dij的理解 dij只能跑最短路每次都找极值点进行一次拓展,同时不能有负边权 所以一次需要确定  两个值都确定的一个点所以扩展的条件有两个 ...

  9. 2017.10.17 蜘蛛难题 思考记录

    强烈建议不要做此题,此题描述差到极点!毒瘤出题人 首先有想法就是从起点往后按照出水管依次满足,但多个水域需要合起来求下一个最低出水口,所以并不是很好维护 所以最好按照时间模拟 先求出当前状态下的最低水 ...

最新文章

  1. 图解Transformer,读完这篇就够了
  2. JavaScript基础,Cookies,Sessions
  3. Android下PopupWindow隐藏及显示(showAtLocation/showAsDropDown)
  4. zlib和openssl相关库错误的解决
  5. iOS开发——高级技术地图功能的实现
  6. sql backup database备份d盘_Oracle RMAN备份与恢复
  7. SpringBoot笔记:SpringBoot集成MinIO分布式文件系统
  8. Android SDK Manager 加载不出tools解决办法
  9. 华为怎么安装服务器系统版本,服务器怎么安装操作系统版本
  10. css中em与px的介绍及换算方法
  11. “加薪”、“洗手间”都不能提?亚马逊内部员工通讯 App 曝光
  12. git常用命令(史上最经典)
  13. 一点创业想法:读书类垂直博客
  14. springboot异步任务
  15. Roboware (ROS IDE)字体设置
  16. 云计算学习笔记3——分布式通信
  17. 发布下今天学习内容--CentOS7安装Oracle 11gR2 图文详解
  18. 如何用Python写一个上课点名系统
  19. mui赋值_mui input用法
  20. failed to push some refs to 'https://e.coding.net/xxx/xxx.git fetch = +refs/heads/*:refs/

热门文章

  1. 关于Word2016敲入公式的新方法
  2. 计算不定方程解的个数的方法汇总
  3. MATLAB AppDesigner 设计UI界面中调用自定义函数
  4. android studio 横幅,有关 android studio notification 横幅弹出的功能没有反应
  5. is not a function_libcxx 的 std::function 源码分析
  6. 数组的内存理解(图示)
  7. 【爬虫】毕设学习记录:python爬取静态网页(只爬取单页)
  8. python列表赋值 连续整数_Python_03_字符串_数据类型_for循环_列表操作
  9. python的表达式范围怎么写_python表达式
  10. stm32 薄膜键盘原理_铅锤哥:市面上的笔记本键盘优缺点解析,看完秒懂