[bzoj 1270][BeijingWc2008]雷涛的小猫
Description
.jpg)
Input
Output
小猫能吃到多少柿子
Sample Input
3 1 4 10
6 3 5 9 7 8 9
5 4 5 3 6 9
Sample Output
HINT
Source
题解
朴素做法很容易想,就是对于每一层,枚举上面d层的最大值来转移,效率$O(n^2h)$
显然没法过
所以考虑优化:能不能$O(1)$算上面d层的最大值?
观察到对于第i层,它只能从i+1层或者i+d层跳过来,所以我们可以预处理i+d层的最大值,i+1层可以直接$O(1)$转移
只需要枚举层数的时候倒序枚举就可以了!保存下来当前层的最大值,下面转移的时候就可以直接调用了
但是要注意的一点是,不能从当前点最上方的i+d层那里跳过来,所以需要保存一下最大值的位置,特判一下,如果最大值正好在最上方,那就得枚举一下i+d层来转移(不过这对于复杂度几乎没有影响)
总复杂度$O(nh)$
#include <bits/stdc++.h>
using namespace std;
int n,m,d,t[][];
int a[][];
int f[][];
int main(){
scanf("%d%d%d",&n,&m,&d);
for(int i=;i<=n;i++){
int x;
scanf("%d",&x);
for(int j=;j<=x;j++){
int y;
scanf("%d",&y);
a[i][y]++;
}
}
for(int i=;i<=n;i++){
f[i][m]=a[i][m];
if(f[i][m]>t[m][]){
t[m][]=f[i][m];
t[m][]=i;
}
}
for(int j=m-;j;j--){
for(int i=;i<=n;i++){
f[i][j]=max(f[i][j],f[i][j+]+a[i][j]);
if(j<=m-d){
if(t[j+d][]!=i){
f[i][j]=max(f[i][j],t[j+d][]+a[i][j]);
}else {
for(int k=;k<=n;k++){
if(k==i)continue;
f[i][j]=max(f[i][j],f[k][j+d]+a[i][j]);
}
}
}
if(f[i][j]>t[j][]){
t[j][]=f[i][j];
t[j][]=i;
}
}
}
int ans=;
for(int i=;i<=n;i++){
ans=max(ans,f[i][]);
}
printf("%d\n",ans);
}
[bzoj 1270][BeijingWc2008]雷涛的小猫的更多相关文章
- BZOJ 1270: [BeijingWc2008]雷涛的小猫( dp )
简单的dp.. dp(i,j) = max(dp(x,y))+cnt[i][j], (x,y)->(i,j)是合法路径. 设f(i)= max(dp(x,y))(1≤x≤N, 1≤y≤i), g ...
- bzoj 1270: [BeijingWc2008]雷涛的小猫 简单dp+滚动数组
1270: [BeijingWc2008]雷涛的小猫 Time Limit: 50 Sec Memory Limit: 162 MB[Submit][Status][Discuss] Descrip ...
- 1270: [BeijingWc2008]雷涛的小猫
1270: [BeijingWc2008]雷涛的小猫 Time Limit: 50 Sec Memory Limit: 162 MBSubmit: 905 Solved: 430[Submit][ ...
- 【BZOJ】1270: [BeijingWc2008]雷涛的小猫(DP+水题)
http://www.lydsy.com/JudgeOnline/problem.php?id=1270 这完全是一眼题啊,但是n^2的时间挺感人.(n^2一下的级别请大神们赐教,我还没学多少dp优化 ...
- 【BZOJ】1270 [BeijingWc2008]雷涛的小猫
[算法]DP [题解]f1[i]表示第i棵树当前高度能得到的最多果子数 f2[i]表示高度i能得到的最多果子数. 于是有: f1[j]=max(f1[j],f2[i+delta])+mp[j][i]; ...
- 【BZOJ1270】1270: [BeijingWc2008]雷涛的小猫 DP
Description Input Output Sample Input Sample Output 8 HINT Source 唉这么蠢的Dp没一下子看出来,Dp真是太弱了啦. #includ ...
- BZOJ1270: [BeijingWc2008]雷涛的小猫
1270: [BeijingWc2008]雷涛的小猫 Time Limit: 50 Sec Memory Limit: 162 MBSubmit: 836 Solved: 392[Submit][ ...
- bzoj1270 BeijingWc2008 雷涛的小猫 DP
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1270 比较水的一道dp f1[i]为高度为i的时候的最大值 f2[i]为当前高度在第i棵树 ...
- [BeijingWc2008]雷涛的小猫
--BZOJ1270 Description 雷涛的小猫雷涛同学非常的有爱心,在他的宿舍里,养着一只因为受伤被救助的小猫(当然,这样的行为是违反学生宿舍管理条例的). 在他的照顾下,小猫很快恢复了健康 ...
随机推荐
- python 基础 内置函数
内置参数 print(all([5,-1,5])) # 非0都是真 true print(all([0,-1,5])) # false print(any([1,0,5])) # 有一个数据为真,就为 ...
- 创建list方法总结
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/sheismylife/article/details/28878593 构建一个list 注意要标记 ...
- Mysql技术内幕——InnoDB存储引擎
Mysql技术内幕——InnoDB存储引擎 http://jingyan.baidu.com/article/fedf07377c493f35ac89770c.html 一.mysql体系结构和存储引 ...
- [py][mx]django项目-让系统用自定义的users表认证
项目开端 参考的是mxonline项目 先把这两项完成 1.app设计 2.app的models的设计 经过分析系统有四个模块 users - 用户管理 course - 课程管理 oranizati ...
- mysql插入和更新时自动更新为当前时间
创建表的时候添加 CREATE TABLE `tmp` ( `id` varchar(32) NOT NULL, `update_time ` timestamp NOT NULL DEFAUL ...
- eclipse导入spring框架
新版spring官网寻找spring framework方法. http://zhidao.baidu.com/link?url=SozH26NGps060CJdFz9Mf-qiLFPZdN__xdp ...
- uva11107 后缀数组
题意给了n个串 然后计算 这些串中的子串在大于1/2的串中出现 求出这个串的最长长度. 将这些串用一个每出现的不同的字符拼起来 ,然后二分找lcp #include <iostream> ...
- Oracle性能优化之HINT的用法
1. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化. 例如: SELECT /*+ALL+_ROWS*/ EMP_NO,EMP_NAM,DAT_I ...
- 20155308 2016-2017-2 《Java程序设计》第9周学习总结
20155308 2016-2017-2 <Java程序设计>第9周学习总结 教材学习内容总结 第十六章 整合数据库 16.1 JDBC入门 驱动的四种类型 JDBC-ODBC Bridg ...
- Python tricks(4) -- with statement
简介 with是从2.5版本引入的一个语法. 这个语法本身是为了解决try..finally繁琐的释放各类资源(文件句柄, Lock等)的问题. 如果想在旧版本中使用这个功能, 直接引入future模 ...