【简】题解 AWSL090429 【数塔问题】
因为每次只ban一个点 而且不是永久性的
预处理出每个点从上往下和从下往上的最大值
每次询问直接暴力 被ban掉点那行去掉那点的最大值
也可以直接预处理出每行的最大值和次大值
还有种做法貌似可以过
预处理出被ban的点是否在链上
是直接输出原本的最大的值 O(1)回答
不是暴力更新被ban的点会影响的到的那个菱形的区域 数组记录答案避免重复询问
最多这样更新n次 平均一次 n*n/4 总复杂度(n^3)/4
只要常数小+数据水就可以过了
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define C getchar()-48
inline ll read()
{
ll s=,r=;
char c=C;
for(;c<||c>;c=C) if(c==-) r=-;
for(;c>=&&c<=;c=C) s=(s<<)+(s<<)+c;
return s*r;
}
#define R register
const int N=;
int n,m,ans;
int a[N][N],vis[N][N],mx[N][N],b[N][N],k[N][N];
inline void work1()
{
for(R int i=n-;i>=;i--)
for(R int j=;j<=i;j++)
{
if(a[i+][j]>=a[i+][j+]) mx[i][j]=,a[i][j]+=a[i+][j];
else mx[i][j]=,a[i][j]+=a[i+][j+];
}
for(R int i=,j=;i<=n;i++){vis[i][j]=;j+=mx[i][j];}
}
inline void work2()
{
for(int i=;i<=n;i++)
for(int j=;j<=i;j++)
b[i][j]+=max(b[i-][j-],b[i-][j]);
}
inline int work3(int x,int y)
{
int ans=;
for(int i=;i<=x;i++)
{
if(i==y) continue;
ans=max(ans,b[x][i]+a[x][i]-k[x][i]);
}
return ans;
}
int main()
{
freopen("tower.in","r",stdin);
freopen("tower.out","w",stdout);
n=read(),m=read();
for(R int i=;i<=n;i++)
for(R int j=;j<=i;j++)
k[i][j]=a[i][j]=b[i][j]=read();
work1();work2();
for(R int i=;i<=m;i++)
{
int x=read(),y=read();
if(x==&&y==){printf("-1\n");continue;}
if(!vis[x][y]){printf("%d\n",a[][]);continue;}
printf("%d\n",work3(x,y));
}
return ;
}
【简】题解 AWSL090429 【数塔问题】的更多相关文章
- Hdoj 2084.数塔 题解
Problem Description 在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的: 有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大 ...
- 题解报告:hdu 2084 数塔(递推dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2084 Problem Description 在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这 ...
- 数塔(杭电oj2084)
Problem Description 在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的: 有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大 ...
- 数塔问题(DP算法)自底向上计算最大值
Input 输入数据首先包括一个整数C,表示测试实例的个数,每个测试实例的第一行是一个整数N(1 <= N <= 100),表示数塔的高度,接下来用N行数字表示数塔,其中第i行有个i个整数 ...
- dp入门--poj 1163数塔
...
- ACM 杭电HDU 2084 数塔 [解题报告]
数塔 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...
- [ACM_动态规划] 数字三角形(数塔)
递归方法解决数塔问题 状态转移方程:d[i][j]=a[i][j]+max{d[i+1][j],d[i+1][j+1]} 注意:1\d[i][j]表示从i,j出发的最大总和;2\变界值设为0;3\递归 ...
- HDU-2084 数塔 经典dp,水
1.HDU-2084 数塔 2.链接:http://acm.hdu.edu.cn/showproblem.php?pid=2084 3.总结:从下往上推,最后归于顶点.方程为 dp[i][j] ...
- HDU2084基础DP数塔
数塔 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...
- hdu----(2084)数塔(dp)
数塔 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...
随机推荐
- oracle非正常退出后重启实例
sqlplus /nolog 回车 conn / as sysdba 回车 startup 回车(如果被告知已启动,应先执行 shutdown immediate 回车)
- 中介者模式 调停者 Mediator 行为型 设计模式(二十一)
中介者模式(Mediator) 调度.调停 意图 用一个中介对象(中介者)来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散 而且可以独立地改变它们之间的交互. ...
- 将传统 WPF 程序迁移到 DotNetCore 3.0
介绍 由于历史原因,基于 Windows 平台存在着大量的基于 .NetFramework 开发的 WPF 和 WinForm 相关程序,如果将这些程序全部基于 DotNetCore 3.0 重写一遍 ...
- July 11th, 2018. Wednesday, Week 28th.
It is during our darkest moments that we must focus to see the light. 越是在艰难的时候就越要着眼于光明. From Aristol ...
- SpringBoot中使用JNnit4(一)之Mockito的使用
经过入门篇,可以编写出一个简单的测试用例. 这篇讲的是BDDMockito的使用. BDDMockito用于测试时进行打桩处理:通过它可以指定某个类的某个方法在什么情况下返回什么样的值. 在单元测试时 ...
- python day08
ascii码转换成字符:ord(str) 字符串转换成ascii:chr(int) 三种字符串 1.普通字符串 --以字符作为输出单位 print(u'abc') 显示给用户看的字符串 2.二进制字符 ...
- Core官方DI解析(5)-ServiceProviderEngine
最后来看看前面一直说的Engine(工作引擎),工作引擎接口是IServiceProviderEngine在ServiceProvider的构造函数中看到了根据指定的Mode创建了不同的实现类,下面先 ...
- Scala--控制结构和函数
一.条件表达式 val s = if(x > 1) 1 else -1 s 可以是 val var s = 0 if(x > 1) s = 1 else s = -1 s 必须是 var ...
- 消息队列比较-rabbitmq/kafka/rocketmq/ONS
主要是比较这几种队列中间件: rabbitmq kafka rocketmq ONS 分以下几个维度来比较 高并发 毫无疑问KAFKA发消息的速度是最快的 ROCKETMQ/ONS次之 rabbitm ...
- opendir函数和readdir函数内涵及用法
工作中遇到奇怪的事,加载增量的时候加载不上.于是开始分析原因,log里边没有任何错误信息,只有加载完成的标志.增量的数据在目录里边是存在的,但是显示的目录大小却不是4096,而是17,不知道为什么.后 ...