[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 雷涛的小猫雷涛同学非常的有爱心,在他的宿舍里,养着一只因为受伤被救助的小猫(当然,这样的行为是违反学生宿舍管理条例的). 在他的照顾下,小猫很快恢复了健康 ...
随机推荐
- redhat7:用户、组和权限
用户: 任何用户被分配一个独特的用户id号(UID) (UID 0标识root用户 用户账号通常从UID 1000开始(在redhat6及之前的版本,从500开始)) . 用户名和UID信息 ...
- oj2894(贝尔曼福特模板)
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2894 就因为粗心,一中午没A,题目说是2000 ...
- Andrew Ng-ML-第十二章-机器学习系统设计
1.确定执行的优先级 图1.邮件垃圾分类举例 选择100个单词作为指示是否是垃圾邮件的指标,将这些单词作为特征向量,只用0/1表示,出现多次也只用1表示,特征变量用来表示邮件. 通常情况下,会选择训练 ...
- ID和Name
ID和Name都可以用来标识一个标记,Javascript分别有两个方法getElementById和getElementByName来定位Dom节点. 区别如下: 1.我们知道在网页做Post提交时 ...
- Java jdbc 操作数据库详解
原文地址https://www.cnblogs.com/huguodong/p/5910859.html JDBC(Java Data Base Connectivity,java数据库连接)是一种用 ...
- Linux系统——LNMP分离式部署
#### 安装nginx ```[root@localhost ~]# tar xf nginx-1.10.2.tar.gz -C /usr/src/[root@localhost ~]# cd /u ...
- Fenwick
hdu1394 这题说的是给了一个序列计算这个序列的逆序对总共要进行n次 每次都将目前的第一个放到序列的最后一个位置然后 计算一次逆序对 这样我们只需要先求一次逆序对 然后接着每次都用F=F+(n-T ...
- EditPlus 4.3.2555 中文版已经发布
新的版本修复了之前版本出现的多行文本缩进调整的问题. 下载连接在页面左上角!
- Protobuffer简介c#
一.Protobuffer和json深度对比 JSON相信大家都知道是什么东西,如果不知道,那可就真的OUT了,GOOGLE一下去.这里就不介绍啥的了. Protobuffer大家估计就很少听说了,但 ...
- Linux命令:查看文件内容cat|tac|more|less|head|tail|nl|od
查看文件内容的命令;cat, tac, more, less, head, tail, nl, 1)cat 由第一行开始显示文档内容,一直显示到最后 2)tac 从最后一行开始显示,一直显示到第一行内 ...