zoukankan      html  css  js  c++  java
  • 解题:CF983B pyramid

    题面

    题目都告诉我们是“金字塔”了,不妨分析分析$f$的性质

    $f(a_1,a_2)=f(a_1$ $xor$ $a_2)=a1$ $xor$ $a_2$

    $f(a_1,a_2,a_3)=f(a_1$ $xor$ $a_2,a_2$ $xor$ $a_3)=a_1$ $xor$ $a_3=f(a_1,a_2)$ $xor$ $f(a_2,a_3)$

    $f(a_1,a_2,a_3,a_4)=f(a_1$ $xor$ $a_2,a_2$ $xor$ $a_3,a_3$ $xor$ $a_4)=f(a_1$ $xor$ $a_3,a_2$ $xor$ $a_4)=a_1$ $xor$ $a_2$ $xor$ $a_3$ $xor$ $a_4=f(a_1,a_2,a_3)$ $xor$ $f(a_2,a_3,a_4)$

    ......

    可以用数(da)学(li)归(da)纳(biao)法证明,$f(a_1,a_2,...,a_n)=f(a_1,a_2,...,a_{n-1})$ $xor$ $f(a_2,a_3,...,a_n)$

    然后就是不会DP的蒟蒻都会做的区间(大概不算?)DP辣

    设$dp[i][j]$表示$(i,j)$的最优答案,那么有枚举长度$i$和起点$j$,就有$dp[j][j+i-1]=max(max(dp[j+1][j+i-1],dp[j][j+i-2]),f(j,j+i-1))$,水水

     1 //get~
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 const int N=5005;
     7 int num[N],xorr[N][N],dp[N][N];
     8 int n,m,t1,t2;
     9 int xoring(int l,int r)
    10 {
    11     if(l==r) return num[l];
    12     if(~xorr[l][r]) return xorr[l][r];
    13     return xorr[l][r]=(xoring(l,r-1)^xoring(l+1,r));
    14 }
    15 int main ()
    16 {
    17     scanf("%d",&n);
    18     for(int i=1;i<=n;i++)
    19         scanf("%d",&num[i]);
    20     scanf("%d",&m);
    21     memset(xorr,-1,sizeof xorr);
    22     for(int i=1;i<=n;i++)
    23         for(int j=1;j<=n-i+1;j++)
    24             dp[j][j+i-1]=max(max(dp[j+1][j+i-1],dp[j][j+i-2]),xoring(j,j+i-1));
    25     for(int i=1;i<=m;i++)
    26         scanf("%d%d",&t1,&t2),printf("%d
    ",dp[t1][t2]);
    27     return 0;
    28 }
    View Code
  • 相关阅读:
    Java 代理模式
    ReentrantLock 详解
    Java线程池详解
    ConcurrentHashMap 解读
    CountDownLatch/CyclicBarrie用法记录
    微信接入笔记记录
    iOS设计模式
    iOS设计模式
    iOS设计模式
    iOS设计模式
  • 原文地址:https://www.cnblogs.com/ydnhaha/p/9684729.html
Copyright © 2011-2022 走看看