[BJWC2008]雷涛的小猫
dp。
刚开始我想的是dp[i][j]表示在第 i 棵树上,高度为h能吃到的最多的果子,如此能得到转移方程: dp[i][j] = max(dp[i][j + 1], dp[k][j + derta]) (k = 1~n && k != i)。但因为这样写会导致dp[k][j + derta] (k > i)的部分没有更新,所以应该把dp试的两胃交换一下。这样dp方程就能正常转移了:
dp[i][j] = max(dp[i + 1][j], max(dp[i + derta][k]) (k = 1~n && k != j) )
然而这样的时间复杂度是O(h * n * n)的,过不了。
优化:观察 max(dp[i + derta][k]) (k = 1~n && k != j),实际上我们就是在高度为i + derta 的所有状态中取一个Max,所以可以开一个数组Max[i]代表高度为 i 时dp[i][j]的最大值,然后每一次求完dp[i][j]时动态更新Max[i]即可。所以转移方程就变成了
dp[i][j] = max(dp[i +1][j], Max[i +derta])
时间复杂度O(h * n)。
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<stack>
#include<queue>
#include<vector>
#include<cctype>
using namespace std;
#define space putchar(' ')
#define enter puts("")
#define Mem(a) memset(a, 0, sizeof(a))
typedef long long ll;
typedef double db;
const int INF = 0x3f3f3f3f;
const db eps = 1e-;
const int max_hig = 2e3 + ;
const int maxn = 5e3 + ;
inline ll read()
{
ll ans = ;
char ch = getchar(), last = ' ';
while(!isdigit(ch)) {last = ch; ch = getchar();}
while(isdigit(ch)) {ans = (ans << ) + (ans << ) + ch - ''; ch = getchar();}
if(last == '-') ans = -ans;
return ans;
}
inline void write(ll x)
{
if(x < ) putchar('-'), x = -x;
if(x >= ) write(x / );
putchar(x % + '');
} int n, h, d;
int a[max_hig][maxn], dp[max_hig][maxn], Max[max_hig]; int main()
{
n = read(), h = read(), d = read();
for(int i = ; i <= n; ++i)
{
int x = read();
for(int j = ; j <= x; ++j) a[read()][i]++;
}
for(int i = h; i >= ; --i)
for(int j = ; j <= n; ++j)
{
dp[i][j] = dp[i + ][j];
if(i + d <= h) dp[i][j] = max(dp[i][j], Max[i + d]);
if(a[i][j]) dp[i][j] += a[i][j];
Max[i] = max(Max[i], dp[i][j]);
}
int ans = ;
for(int i = ; i <= n; ++i) ans = max(ans, dp[][i]);
write(ans); enter;
return ;
}
[BJWC2008]雷涛的小猫的更多相关文章
- P1107 [BJWC2008]雷涛的小猫
题目描述 雷涛同学非常的有爱心,在他的宿舍里,养着一只因为受伤被救助的小猫(当然,这样的行为是违反学生宿舍管理条例的).在他的照顾下,小猫很快恢复了健康,并且愈发的活泼可爱了. 可是有一天,雷涛下课回 ...
- 【洛谷P1107】 [BJWC2008]雷涛的小猫
雷涛的小猫 题目链接 n^2DP比较好想, f[i][j]表示第i棵树高度为j的最大收益 直接从上到下转移即可,每次记录下max f[1~n][j] 用于下面的转移 f[i][j]=max(f[i][ ...
- BZOJ1270[BJWC2008]雷涛的小猫
雷涛同学非常的有爱心,在他的宿舍里,养着一只因为受伤被救助的小猫(当然,这样的行为是违反学生宿舍管理条例的).在他的照顾下,小猫很快恢复了健康,并且愈发的活泼可爱了. 可是有一天,雷涛下课回到寝室,却 ...
- [BJWC2008]雷涛的小猫 dp
题目背景 原最大整数参见P1012 题目描述 雷涛同学非常的有爱心,在他的宿舍里,养着一只因为受伤被救助的小猫(当然,这样的行为是违反学生宿舍管理条例的).在他的照顾下,小猫很快恢复了健康,并且愈发的 ...
- BZOJ1270或洛谷1107 [BJWC2008]雷涛的小猫
BZOJ原题链接 洛谷原题链接 \(DP\)水题. 定义\(f[i][j]\)表示小猫在高度\(i\),位于第\(j\)棵树时最多能吃到的柿子的数量.分为直接往下跳和跳到另一棵树两个决策. 那么很容易 ...
- 洛谷P1107[BJWC2008]雷涛的小猫题解
题目 这个题可以说是一个很基础偏中等的\(DP\)了,很像\(NOIpD1T2\)的难度,所以这个题是很好想的. 简化题意 可以先简化一下题意,这个题由于从上面向下调和从下向上爬都是一样的,所以我们就 ...
- 洛谷P1107 & BZOJ1270 [BJWC2008]雷涛的小猫
一道DP. 给你一个矩阵里面有很多数,你需要从上往下找到一种跳跃方法使得经过的点的价值之和最大. 具体题面见链接 洛谷P1107 BZOJ1270 很明显是一个二维的DP. #include<b ...
- 洛谷P1107 [BJWC2008]雷涛的小猫 题解
题面 以下是luogu给的标签 但字符串是什么鬼.... 玄学... 哦吼~ #include<cstdio> #include<iostream> using namespa ...
- BZOJ_1270_雷涛的小猫_(动态规划)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1270 有n棵树,高度为h.一只猫从任意一棵树的树顶开始,每次在同一棵树上下降1,或者跳到其他树 ...
随机推荐
- 【转】Cookie深度解析
Cookie简介 众所周知,Web协议(也就是HTTP)是一个无状态的协议(HTTP1.0).一个Web应用由很多个Web页面组成,每个页面都有唯一的URL来定义.用户在浏览器的地址栏输入页面的URL ...
- LeetCode CombinationSum
class Solution { public: vector<vector<int> > combinationSum(vector<int> &cand ...
- 神奇的Flex 布局
layout是css中的一个重点.传统的页面布局是盒子模型,依赖 display属性 ,position属性 , float属性.它对于那些特殊布局非常不方便,而且定位用多了会出现挺多的bug. 所以 ...
- 转:php中判断某个IP地址是否存在范围内
原文:php中判断某个IP地址是否存在范围内 //案例:判断192.168.1.127是否在 (192.168.1.1--192.168.1.255)的范围里面 $ip_start = get_ipl ...
- C# SqlConnection连接sql server
try { SqlConnection conn = new SqlConnection(); conn.ConnectionString = "Data Source=127.0.0.1; ...
- JS数组与对象的遍历方法大全
本文简单解析各种数组和对象属性的遍历方法: 原生for循环.for-in及forEach ES6 for-of方法遍历类数组集合 Object.key()返回键名的集合 jQuery的$.each() ...
- .NET版UEditor报请求后台配置项http错误,上传功能无法使用的错误解决
在配置UEditor的时候,总是报请求后台配置项http错误,上传功能将不能正常使用!,上传图片等功能都无法使用.折磨了一下午,逐步调试发现了错误原因:
- java基础——队列
目录 前言 基础 实现: 两个队列模拟一个堆栈 前言 java已经提供了堆和栈的相对应的类,这里只是模拟一下队列. 队列是一种先进先出的线性表. 基础 java5中新增加了java.util.Queu ...
- Oracle EBS 附件功能
SELECT fde.table_name, fde.data_object_code, fdet.user_entity_name, fdet.user_entity_prompt, fat.app ...
- 使用cnpm install提示package not found
使用cnpm install 的时候提示Can't find package. 在cnpm package里能搜索到scratch-audio的包,但版本是0.1.0-prerelease.20190 ...