题目描述:

Life种了一块田,里面种了一些桃树。

Life对PFT说:“我给你一定的时间去摘桃,你必须在规定的时间之内回到我面前,否则你摘的桃都要归我吃!”

PFT思考了一会,最终答应了!

由于PFT的数学不好!它并不知道怎样才能在规定的时间获得最大的价值,

由于PFT不是机器人,所以他的体力并不是无限的,他不想摘很多的桃以至体力为0,而白白把桃给Life(如果体力为0,刚刚好回到Life的地点是不行的)。同时PFT每次只能摘一棵桃树,,每棵桃树都可以摘K次(对于同一棵桃每次摘的桃数相同)。每次摘完后都要返回出发点(PFT一次拿不了很多)即Life的所在地(0,0){试验田左上角的桃坐标是(1,1)}。

PFT每秒只能移动一个单位,每移动一个单位耗费体力1(摘取不花费时间和体力,但只限上下左右移动)。

输入格式:

第一行:四个数为N,M,TI,A 分别表示试验田的长和宽,Life给PFT的时间,和PFT的体力。

下面一个N行M列的矩阵桃田。表示每次每棵桃树上能摘的桃数。

接下来N行M列的矩阵,表示每棵桃最多可以采摘的次数K。

输出格式:

一个数:PFT可以获得的最大的桃个数。

样例输入:

4 4 13 20
10 0 0 0
0 0 10 0
0 0 10 0
0 0 0 0
1 0 0 0
0 0 2 0
0 0 4 0
0 0 0 0

样例输出:

10

思路:(多重背包+二进制优化)的加强版。由于PFT只能走直线,所以当PFT的位置在(i,j)时,PFT到起点的距离是i+j。又因为PFT的体力与PFT的时间缺一不可,所以只要在时间与体力-1之间取较小值即可。注意:当体力=0时,回到起点是不行的,所以要体力-1。

二进制优化(重点):

for(int j=1;j<=m;j++){cin>>s;int t=1,x=2*(i+j);if(l[i][j]);{while(s>=t) {c[++q]=t*x;v[q]=t*l[i][j];s-=t;t*=2;//拆成1,2,4,8,16的形式
        }c[++q]=x*s;v[q]=s*l[i][j];}
}
//只要s>=t,则还可以再拆,于是t乘2,s减少t。

上代码(改进过的):

#include<bits/stdc++.h>
using namespace std;
long long n,m,v[100000],c[100000],l[1000][1000],k[100000],t,e,q,s;
int main() {cin>>n>>m>>t>>e;for(register int i=1; i<=n; i++) for(register int j=1; j<=m; j++)cin>>l[i][j];for(register int i=1; i<=n; i++) // register,寄存器,可以加速 for(register int j=1; j<=m; j++) {cin>>s;int t=1,x=2*(i+j);if(l[i][j]){//二进制优化 while(s>=t) {c[++q]=t*x;v[q]=t*l[i][j];s-=t;t*=2;}c[++q]=x*s;v[q]=s*l[i][j];}}t=min(t,e-1);for(register int i=1;i<=q;i++)for(register int j=t;j>=c[i];j--)k[j]=max(k[j],k[j-c[i]]+v[i]);//01背包就可以了 cout<<k[t];return 0;
}

View Code

 

转载于:https://www.cnblogs.com/YFbing/p/9580396.html

科技庄园(背包dp)---对于蒟蒻来说死了一大片的奇题相关推荐

  1. 背包九讲 (蒟蒻版)之01背包

    hello,你们的loony上线啦.你们知道吗?我今天早上起来一看手机,600多人在CSDN上访问过我,当时我心情都要炸了(补充:高兴炸了),因为,这毕竟只是本蒟蒻的梦想嘛~ 好了不嘚瑟啦! 今天就来 ...

  2. [CTS2019]氪金手游(容斥+树形背包DP)

    降智好题.本蒟蒻VP时没想到怎么做被题面迷惑了,只会20分的"好"成绩.简直自闭了. 首先显然度为0的点是白给的,根据等比数列求和公式即可求得.然后考虑这个树如果是一颗外向树,就是 ...

  3. C++ 合辑——蒟蒻之路

    大家好,在下雨落,各位大侠昨天愚人节有没有被戏弄呢?又要给大家带来合辑了,这次带来了 蒟蒻之路:( if 语句!!!) ( 蒟蒻是每一个OIer对自己的"尊称",表示谦卑和对编程的 ...

  4. 蒟蒻的五周总结(解释引用)《挑战》

    一:尺取法: 解释摘自:(12条消息) 尺取法 - 详解 + 例题模板(全)_lxt_Lucia的博客-CSDN博客_尺取法 引用:顾名思义,像尺子一样取一段,借用挑战书上面的话说,尺取法通常是对数组 ...

  5. NOIP 2015 蒟蒻做题记录

    昨天做了noip 2015 的题.因为之前做过几道,最开始做的很快,也都A了.可是子串斗地主运输计划什么的这些没做过的题还是把我恶心的不行QAQ我这个大蒟蒻还是没有A掉..所以说先写一下应该得到的暴力 ...

  6. [颓废史]蒟蒻的刷题记录

    QAQ蒟蒻一枚,其实我就是来提供水题库的. 以下记录从2016年开始. 1.1 1227: [SDOI2009]虔诚的墓主人 树状数组+离散化 3132: 上帝造题的七分钟 树状数组 二维区间加减+查 ...

  7. 蒟蒻的HNOI2017滚粗记

    蒟蒻的第一次省选,然而并没有RP爆发... Day 1: 8:00开考,(然而密码错误是什么鬼).跌跌撞撞,8:40终于拿到纸质试题. { T1:作为一名没有学过Splay的蒟蒻,考场上真的被出题人感 ...

  8. 10月19日 蒟蒻的流水账

    10:03:48 刚刚写了一道DP题 改了好久,因为天真的以为一开始的0结点可以把所有不连通的树串起来的,没想到不行!!  要自己搞一个超级源点. (提交了超级多次,一直没过,严重拉低了AC率)   ...

  9. 【诗和远方】一个蒟蒻的年初展望

    一个蒟蒻的年初展望 2017年,是基年,全名有机年.再此,发表一下年初展望,对年许下一些诺言,记录下自己的理想. 新的一年,文化课进级部前100,数学不掉下130,英语争取搞定高中所有词汇,物理提升至 ...

  10. 背包DP FOJ 2214

    题目:http://120.78.128.11/Problem.jsp?pid=2053 这题看起来是一题普通背包题,但是你会发现相对价格来说,体积太大了,此时只要将体积看为价格,价格看为体积,然后再 ...

最新文章

  1. Mac如何安装并永久激活PyCharm以及IntelliJ IDEA
  2. Spring框架入门基础,不可多得的干货
  3. ***CSS魔法堂:选择器及其优先级
  4. gogs mysql 报错_docker上对gogs二次开发
  5. vnc移植_VNC远程控制软件使用说明
  6. RISC-V 能打 50 年!不必期待 RISC-VI —— 对话 RISC-V CTO Mark Himelstein
  7. windwos::mutex
  8. pandas df中有几个数组_还在抱怨pandas运行速度慢?这几个方法会颠覆你的看法
  9. Unity 代码实现锁定手机横屏
  10. 民营企业该如何留住人才
  11. vue3和vue2不同点总结
  12. python2 assert判断字典的包含关系
  13. [高项]关键路径法VS关键链法
  14. 想知道香港汇丰银行如何开户吗?
  15. 周末去哪儿架构师跟你聊:大数据平台快速解决方案
  16. IntelliJ IDEA 2019从入门到癫狂
  17. Python从无到有搭建接口(API)自动化测试框架
  18. Centos8网口聚合
  19. 2008校园招聘网申系统研究报告
  20. 高德地图绘制行政边界

热门文章

  1. 不要网上乱拷贝代码了!一段网上找的代码把公司服务器崩了!
  2. 4分钟看尽Top编程语言15年沉浮:C#默Java泪,Python终上位!
  3. Redis深入之道:原理解析、场景使用以及视频解读
  4. HTTPS 证书生成原理和部署细节
  5. 日请求从百万到八亿的技术历程
  6. 这款 Android 图片选择库美哭了
  7. ActiveMQ下载与安装(Linux环境下进行)
  8. NOIP2018普及T2暨洛谷P5016 龙虎斗
  9. 大数据中mapreduce的核心,shuffle的理解,以及在shuffle中的优化问题
  10. mysql 主命令总结