洛谷P1107[BJWC2008]雷涛的小猫题解
这个题可以说是一个很基础偏中等的\(DP\)了,很像\(NOIpD1T2\)的难度,所以这个题是很好想的。
简化题意
可以先简化一下题意,这个题由于从上面向下调和从下向上爬都是一样的,所以我们就可以轻松的想到暴力的方法。
设\(dp[i][j]\)表示i编号的树的j高度从一开始跳最多能吃多少柿子,每次都选择\(max\)(当前这个树下面一格的柿子数,其他树下面跳\(delta\)格的柿子数)。
但是这样的时间复杂度是非常大的,主要就在我们在计算出每一高度的所有树的dp之后,下次我们再用到这些树的\(dp\)值时还需要再\(O(n)\)枚举一下,因此就浪费了大量时间,而如果我们记录一个数组\(maxn[i]\)表示i这个高度所有树的\(dp\)最大值,在计算时便可以更新,然后下次调用时便可直接调用了。
这就是记忆化的思想。
\(Code\)
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
int n, m, h, del, a, data[4010][4010], dp[4010][4010], maxn[100100];//dp[i][j]表示从0开始第i棵树到达第j高度时最多可以吃到的柿子。
inline void init()
{
scanf("%d%d%d", &n, &h, &del);
for (int i = 1; i <= n; i++)
{
scanf("%d", &m);
for (int j = 1; j <= m; j++)
scanf("%d", &a), data[i][a]++;
}
}
int main()
{
init();
for (int k = 1; k <= h; k++)
for (int i = 1; i <= n; i++)
{
if (k < del)
dp[i][k] = dp[i][k - 1] + data[i][k], maxn[k] = max(maxn[k], dp[i][k]);
else
dp[i][k] = max(dp[i][k - 1], maxn[k - del]) + data[i][k], maxn[k] = max(maxn[k], dp[i][k]);
}
printf("%d", maxn[h]);
}
洛谷P1107[BJWC2008]雷涛的小猫题解的更多相关文章
- 洛谷P1107 [BJWC2008]雷涛的小猫 题解
题面 以下是luogu给的标签 但字符串是什么鬼.... 玄学... 哦吼~ #include<cstdio> #include<iostream> using namespa ...
- BZOJ1270或洛谷1107 [BJWC2008]雷涛的小猫
BZOJ原题链接 洛谷原题链接 \(DP\)水题. 定义\(f[i][j]\)表示小猫在高度\(i\),位于第\(j\)棵树时最多能吃到的柿子的数量.分为直接往下跳和跳到另一棵树两个决策. 那么很容易 ...
- P1107 [BJWC2008]雷涛的小猫
题目描述 雷涛同学非常的有爱心,在他的宿舍里,养着一只因为受伤被救助的小猫(当然,这样的行为是违反学生宿舍管理条例的).在他的照顾下,小猫很快恢复了健康,并且愈发的活泼可爱了. 可是有一天,雷涛下课回 ...
- 【洛谷P1107】 [BJWC2008]雷涛的小猫
雷涛的小猫 题目链接 n^2DP比较好想, f[i][j]表示第i棵树高度为j的最大收益 直接从上到下转移即可,每次记录下max f[1~n][j] 用于下面的转移 f[i][j]=max(f[i][ ...
- 洛谷P1107 & BZOJ1270 [BJWC2008]雷涛的小猫
一道DP. 给你一个矩阵里面有很多数,你需要从上往下找到一种跳跃方法使得经过的点的价值之和最大. 具体题面见链接 洛谷P1107 BZOJ1270 很明显是一个二维的DP. #include<b ...
- BZOJ1270[BJWC2008]雷涛的小猫
雷涛同学非常的有爱心,在他的宿舍里,养着一只因为受伤被救助的小猫(当然,这样的行为是违反学生宿舍管理条例的).在他的照顾下,小猫很快恢复了健康,并且愈发的活泼可爱了. 可是有一天,雷涛下课回到寝室,却 ...
- [BJWC2008]雷涛的小猫 dp
题目背景 原最大整数参见P1012 题目描述 雷涛同学非常的有爱心,在他的宿舍里,养着一只因为受伤被救助的小猫(当然,这样的行为是违反学生宿舍管理条例的).在他的照顾下,小猫很快恢复了健康,并且愈发的 ...
- [BJWC2008]雷涛的小猫
嘟嘟嘟 dp. 刚开始我想的是dp[i][j]表示在第 i 棵树上,高度为h能吃到的最多的果子,如此能得到转移方程: dp[i][j] = max(dp[i][j + 1], dp[k][j + de ...
- [BeijingWc2008]雷涛的小猫
--BZOJ1270 Description 雷涛的小猫雷涛同学非常的有爱心,在他的宿舍里,养着一只因为受伤被救助的小猫(当然,这样的行为是违反学生宿舍管理条例的). 在他的照顾下,小猫很快恢复了健康 ...
随机推荐
- 正确理解CAP定理
前言 CAP的理解我也看了很多书籍,也看了不少同行的博文,基本每个人的理解都不一样,而布鲁尔教授得定义又太过的简单,没有具体描述和场景案例分析.因此自己参考部分资料梳理了一篇与大家互相分享一下. 标题 ...
- .net core jwt
https://www.cnblogs.com/JacZhu/p/6837676.html
- java使用Map做缓存你真的用对了吗?弱引用WeakHashMap了解一下
目录 关于缓存我们应该考虑什么?-intsmaze WeakHashMap弱引用-intsmaze 线程安全问题-intsmaze Collections-intsmaze ThreadLocal-i ...
- python 跨域处理方式
因为浏览器的同源策略限制,不是同源的脚本不能操作其他源下面的资源,想操作另一个源下面的资源就属于跨域了,这里说的跨域是广义跨域,我们常说的代码中请求跨域,是狭义的跨域,即在脚本代码中向非同源域发送ht ...
- docker配置阿里云镜像加速
一.登录阿里云控制台,并打开镜像加速器页面,复制加速器地址 二.修改daemon配置文件/etc/docker/daemon.json ,将复制的地址按照如下格式写入文件,若存在多行,使用逗号分隔. ...
- Python入门-三级菜单
作业题目: 三级菜单 作业需求: menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, 'google':{} }, '中关村':{ '爱奇艺':{}, ...
- iOS上手指点击波纹效果的实现
https://www.jianshu.com/p/35e6f53ca0fe 2016.10.19 22:00* 字数 135 阅读 2468评论 2喜欢 7 闲暇时间做了一个反馈手指点击屏幕的效果, ...
- Python_架构、同一台电脑上两个py文件通信、两台电脑如何通信、几十台电脑如何通信、更多电脑之间的通信、库、端口号
1.架构 C/S架构(鼻祖) C:client 客户端 S:server 服务器 早期使用的一种架构,目前的各种app使用的就是这种架构,它的表现形式就是拥有专门的app. B/S架构(隶属于C/ ...
- centos/ubuntu 双击运行 .sh(shell)文件
centos 创建桌面双击启动程序(更改图标) - Feythin Lau - 博客园http://www.cnblogs.com/feiyuliu/archive/2012/11/29/279503 ...
- Mongo安装与使用
MongoDB[1] 是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. mongoDB MongoDB[2] 是一个介于关系数据库和非关系数 ...