zoukankan      html  css  js  c++  java
  • 暑假集训Day13 I (区间DP)

    题目链接在这里:Problem - I - Codeforces

    这道题首先应该知道一些异或的性质

     

    然后以及动手画一下可以发现b[i][j]=b[i+1][j]^b[i][j-1]

    由于这是求区间的最大值,所以我们可以用区间dp解决,因为只是最大值,不涉及到区间中分两半时的操作,所以可以降一维k的复杂度。

     1 #include "bits/stdc++.h"
     2 using namespace std;
     3 const int MAX=5005;
     4 int n,m,a[MAX],b[MAX][MAX],f[MAX][MAX];
     5 int main(){
     6     freopen ("i.in","r",stdin);
     7     freopen ("i.out","w",stdout);
     8     int len,i,j,l,r;
     9     scanf("%d",&n);
    10     for (i=1;i<=n;i++){
    11         scanf("%d",a+i);
    12         f[i][i]=b[i][i]=a[i];
    13     }
    14     for (len=2;len<=n;len++)
    15         for (i=1;i<=n-len+1;i++){
    16             j=i+len-1;
    17             b[i][j]=b[i+1][j]^b[i][j-1];
    18             f[i][j]=max(b[i][j],max(f[i+1][j],f[i][j-1]));
    19         }
    20     scanf("%d",&m);
    21     while (m--){
    22         scanf("%d%d",&l,&r);
    23         printf("%d
    ",f[l][r]);
    24     }
    25     return 0;
    26 }
    未来是什么样,未来会发生什么,谁也不知道。 但是我知道, 起码从今天开始努力, 肯定比从明天开始努力, 要快一天实现梦想。 千里之行,始于足下! ——《那年那兔那些事儿》
  • 相关阅读:
    sort函数的运用
    数据库设计三大范式
    LeetCode 64. 求1+2+…+n
    LeetCode 876. 链表的中间结点
    单链表的创建和基本操作 C语言
    LeetCode 365. 水壶问题
    LeetCode 1160. 拼写单词
    LeetCode 409. 最长回文串
    LeetCode 836. 矩形重叠
    LeetCode 7. 整数反转
  • 原文地址:https://www.cnblogs.com/keximeiruguo/p/15068592.html
Copyright © 2011-2022 走看看