P3800 Power收集
DP
每次向下一格,显然是DP
方程也十分显然:
设$f[i][j]$为到第$i$行第$j$列时能得到的最大价值
显然$f[i][j]=max(f[i-1][k]+v[i][j]),( max(0,j-t)<=k<=min(m,j+t) )$
然后40分,其他超时..
考虑优化
方程稍微变一下:$f[i][j]=max(f[i-1][k])+v[i][j],$
同样$max(0,j-t)<=k<=min(m,j+t)$;
发现只要能快速处理出$f[i-1][k]$的最大值就能快速更新$f[i][j]$
因为区间大小不会改变(不考虑达到边界),改变的只有区间的开端,所以可以考虑通过单调队列预处理..
然后就结束了,稍微注意边界问题就好了
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
int n,m,k,t;
int map[][],f[][];
int q[],ans[];
int main()
{
int a,b,c;
cin>>n>>m>>k>>t;
int s=t*+;
while(k--)
{
scanf("%d%d%d",&a,&b,&c);
map[a][b]=c;
}
//cout<<endl;
for(int i=;i<=n;i++)
{
int head=,last=;
//单调队列预处理
for(int j=;j<=m+t;j++)//注意j到m+t
{
while(head<=last&&f[i-][j]>=f[i-][q[last]])
last--;
while(head<=last&&j-q[head]>=s)
head++;
q[++last]=j;
ans[j]=f[i-][q[head]];
//cout<<ans[j]<<" ";
}
for(int j=;j<=m;j++)
f[i][j]=ans[j+t]+map[i][j];
//cout<<endl;
}
int Ans=;
for(int i=;i<=m;i++)
Ans=max(Ans,f[n][i]);
cout<<Ans;
return ;
}
P3800 Power收集的更多相关文章
- luogu P3800 Power收集
题目背景 据说在红雾异变时,博丽灵梦单身前往红魔馆,用十分强硬的手段将事件解决了. 然而当时灵梦在Power达到MAX之前,不具有“上线收点”的能力,所以她想要知道她能收集多少P点,然而这个问题她答不 ...
- 洛谷 P3800 Power收集
题目背景 据说在红雾异变时,博丽灵梦单身前往红魔馆,用十分强硬的手段将事件解决了. 然而当时灵梦在Power达到MAX之前,不具有“上线收点”的能力,所以她想要知道她能收集多少P点,然而这个问题她答不 ...
- AC日记——Power收集 洛谷 P3800
Power收集 思路: 单调队列优化dp: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 4005 stru ...
- 洛谷p3800:Power收集
考虑朴素的dp: 对于每一行的每一个点 枚举能到的所有点(类似bzoj1648 比这题简单的dp) 期望时间复杂度O(NMT) 显然是超时做法 那么我们发现只有k个点对答案有贡献 考虑对每一个有权值的 ...
- 洛谷3800:Power收集——题解
https://www.luogu.org/problemnew/show/P3800 可以把游戏界面理解成一个N行M列的棋盘,有K个格子上有P点,其价值为val(i,j) 初始灵梦可以选择在第一行的 ...
- 【Luogu】P3800点收集(DP)
题目链接 原题解 代码 #include<iostream> #include<cstdio> #include<cstring> #include<ccty ...
- 一起学微软Power BI系列-官方文档-入门指南(7)发布与共享-终结篇+完整PDF文档
接触Power BI的时间也只有几个月,虽然花的时间不多,但通过各种渠道了解收集,谈不上精通,但对一些重要概念和细节还是有所了解.在整理官方文档的过程中,也熟悉和了解了很多概念.所以从前到后把微软官方 ...
- 探索 OpenStack 之(17):计量模块 Ceilometer 中的数据收集机制
本文将阐述 Ceilometer 中的数据收集机制.Ceilometer 使用三种机制来收集数据: Notifications:Ceilometer 接收 OpenStack 其它服务发出的 noti ...
- 我的GTD中收集的书单
在几年的GTD过程中,收集了一些想读的书目,没有系统地整理,每当读完一本之后,就翻翻书单,寻找下一本感兴趣的书,书是不可能读完的,只能找有兴趣的.符合自己目标方向的.有些书记录了豆瓣上的评分,虽然不是 ...
随机推荐
- C连接oracle数据库
int db_conn_main() { EXEC SQL BEGEIN DECLARE SECTION; +]; +]; +]; varchar username[]; varchar passwo ...
- SQLiteopenhelper创建database的过程
首先由于SQLiteOpenHelper是一个抽象类,所以我们要创建一个自己的类实现它,并实现抽象方法, public void onCreate(SQLiteDatabase db) public ...
- springmvc 注解扫描失败的可能原因
情况是这样的:web工程采用了ssm框架,dao和service都是通过annotation方式注入的,工程运行正常.后来把service和dao打成jar放在工程的lib目录下,问题来了,配置没改动 ...
- CURD 操作 [2]
一.数据读取 在之前的课程中,我们已经大量使用了数据读取的功能,比如 select()方法.结合各种连贯方法可以实现数据读取的不同要求,支持连贯的方法有: 1.where,查询或更新条件:2.tabl ...
- mac上virtualBox的安装和使用
一.下载和安装 去oracle官网下载mac版的virtualBox. 官网下载地址:https://www.virtualbox.org/. 下载好后按照向导进行安装即可. 二.使用方法 1.新建虚 ...
- matlab rand(3,5)
rand()函数在(0,1)上创建均匀分布的随机数的数组 >> rand(3,5) ans = 0.8147 0.9134 0.2785 0.9649 0.9572 0.9058 0.63 ...
- 在Ubuntu里安装Mysql5.7.23
准备在Linux里安装Mysql,安装过程中遇到很多问题,这里记录下我成功安装的过程. 操作系统:Ubuntu 18.04 数据库:Mysql 5.7.23 安装步骤: 1.下载一个apt,下载mys ...
- CF702E Analysis of Pathes in Functional Graph
倍增练习题. 基环树上倍增一下维护维护最小值和权值和,注意循环的时候$j$这维作为状态要放在外层循环,平时在树上做的时候一个一个结点处理并不会错,因为之前访问的结点已经全部处理过了. 时间复杂度$O( ...
- 《Effective Java》第8章 通用程序设计
第47条:了解和使用类库 Top 100 Java Libraries on Github 2016 Library Number of Projects Type % of projects jun ...
- 《Head First Servlets & JSP》-6-会话管理
容器怎么知道客户是谁 Http协议是无状态连接,客户浏览器与服务器建立连接.发出请求.得到响应,然后关闭连接.即,连接只针对一个请求/响应. 对容器而言,每个请求都来自于一个新的客户. 客户需要一个唯 ...