题面

传送门
题目大意:
给你一个计算区间f函数的公式,举例f(1,2,4,8)=f(1⊕2,2⊕4,4⊕8)=f(3,6,12)=f(3⊕6,6⊕12)=f(5,10)=f(5⊕10)=f(15)=15 然后现在给你一个数列,n<=5000,然后q个询问,q<=100000,每次询问[l,r]区间内f函数的最大值是多少

分析

此题可用DP求解
设dp[i][j]dp[i][j]表示区间[i,j]f函数最大值
显然初始值dp[i][i]=a[i]dp[i][i]=a[i]
15
5 10
3 6 12
1 2 4 8
我们把题面例子中每个区间的f值写成一个金字塔形
从下到上为1~4行
对于每个区间[l,r],其实我们要统计的是金字塔中的一小部分的最大值
如[1,2],即求金字塔
3
1 2
的最大值,显然是3
显然可以从下到上递推写出
dp[i][j]=dp[i+1][j]xordp[i][j]=dp[i+1][j]xor dp[i][j−1]dp[i][j−1]
又因为要统计最大值
dp[i][j]=max(dp[i+1][j],dp[i][j−1],dp[i][j[)dp[i][j]=max(dp[i+1][j],dp[i][j−1],dp[i][j[)
总的状态转移方程为
dp[i][j]=max(dp[i+1][j],dp[i][j−1],dp[i+1][j]xordp[i][j−1])dp[i][j]=max(dp[i+1][j],dp[i][j−1],dp[i+1][j]xordp[i][j−1])
在代码中分步实现更方便
时间复杂度O(n2)O(n2)

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 5005
using namespace std;
int n,q;
int dp[maxn][maxn];
int l,r;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&dp[i][i]);
for(int i=n;i>=1;i--){
for(int j=i+1;j<=n;j++){
dp[i][j]=dp[i][j-1]^dp[i+1][j];
}
}
for(int i=n;i>=1;i--){
for(int j=i+1;j<=n;j++){
dp[i][j]=max(dp[i][j],max(dp[i][j-1],dp[i+1][j]));
}
}
scanf("%d",&q);
for(int i=1;i<=q;i++){
scanf("%d %d",&l,&r);
printf("%d\n",dp[l][r]);
}
}

Codeforces 984D 题解(DP)的更多相关文章

  1. Codeforces 691E题解 DP+矩阵快速幂

    题面 传送门:http://codeforces.com/problemset/problem/691/E E. Xor-sequences time limit per test3 seconds ...

  2. Codeforces 833B 题解(DP+线段树)

    题面 传送门:http://codeforces.com/problemset/problem/833/B B. The Bakery time limit per test2.5 seconds m ...

  3. [FJOI2007]轮状病毒 题解(dp(找规律)+高精度)

    [FJOI2007]轮状病毒 题解(dp(找规律)+高精度) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1335733 没什么好说的,直接把规律找出来,有 ...

  4. Codeforces 840C 题解(DP+组合数学)

    题面 传送门:http://codeforces.com/problemset/problem/840/C C. On the Bench time limit per test2 seconds m ...

  5. Codeforces 822E Liar dp + SA (看题解)

    Liar 刚开始感觉只要开个dp[ i ][ j ][ 0 / 1 ]表示处理了s的前 i 个用了 k 段, i 是否是最后一段的最后一个字符 的 t串最长匹配长度, 然后wa24, 就gg了.感觉这 ...

  6. Codeforces 983C Elevator dp (看题解)

    Elevator 怎么今天写啥题都不会写啊, 我是傻了吗.. 把电梯里面四个人的目标点当作状态, 然后暴力转移. #include<bits/stdc++.h> #define LL lo ...

  7. Codeforces Round #674 (Div. 3) F. Number of Subsequences 题解(dp)

    题目链接 题目大意 给你一个长为d只包含字符'a','b','c','?' 的字符串,?可以变成a,b,c字符,假如有x个?字符,那么有\(3^x\)个字符串,求所有字符串种子序列包含多少个abc子序 ...

  8. Codeforces 176B (线性DP+字符串)

    题目链接: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=28214 题目大意:源串有如下变形:每次将串切为两半,位置颠倒形成 ...

  9. CodeForces - 1051D Bicolorings(DP)

    题目链接:http://codeforces.com/problemset/problem/1051/D 看了大佬的题解后觉着是简单的dp,咋自己做就做不来呢. 大佬的题解:https://www.c ...

随机推荐

  1. Springboot读取properties配置文件数据

    一.使用@ConfigurationProperties来读取 1.Coffer entity @Configuration @ConfigurationProperties(prefix = &qu ...

  2. 第一次接触oracle

    登录 SQLPLUS cmd sqlplus [用户名]/[密码][@数据库] [参数] sqlplus sys/orcl as sysdba -- 登录 sys 用户,必须指定 sysdba 或 s ...

  3. XTemplate模板学习和使用总结

    XTemplate模板学习和使用总结 前言   XTemplate是我接触的第一个模板语言,用在公司的一个NodeJS项目中,跟它打交道经常是因为需要使用它的语法向模板中注入数据.因为是刚入门前端不久 ...

  4. SQL Server参数优化

    内存参数: 此处为512G物理内存,一般来说设置为物理内存80%左右,设置过大资源不会自动释放,内存可能会持续增长:设置过小资源浪费. CPU参数: 最大工作线程数: 此处为4个CPU40核,调整后物 ...

  5. Java——容器(Comparable)

    [Comparable]  

  6. 清北学堂算法&&数据结构DAY1——知识整理

    简述: 今天主要讲分治(主要是二分).倍增.贪心.搜索,还乱入了爬山算法和模拟退火(汗...) 一.分(er)治(fen): 二分是个在OI中广泛运用的思想,随便举些例子,就足以发现二分的运用的广泛性 ...

  7. Internet History, Technology, and Security(week6)——Technology: Transport Control Protocol(TCP)

    前言: 这周开始学习分层网络模型的第三层,传输层. Transport/Reliability: Transport Layer TCP层的目的是补偿IP层中可能出现的错误,并充分利用可用资源.由于I ...

  8. 把图片画到画布上,适应PC和移动端

    画一张图片到画布上 <canvas id="myCanvas" width="1000px" height="200px" >您 ...

  9. BigDecimal.setScale 处理java小数点[转]

    BigDecimal.setScale()方法用于格式化小数点setScale(1)表示保留一位小数,默认用四舍五入方式 setScale(1,BigDecimal.ROUND_DOWN)直接删除多余 ...

  10. 标签button:点击button按钮时,出现了页面自动刷新的情况

    原html: <button class="btn btn-primary" id="btnSubmit" name="btnSubmit&qu ...