zoukankan      html  css  js  c++  java
  • 区间dp——cf983b

     推出一个很神奇的结论就可以进行dp了

    这个结论不光可以用在异或操作上,还可以用在任意操作里

    /*
    首先可以做出一个关于f的递推式
     f[1..n]=f[ f[1..n-1],f[2..n] ]
    那么直接把f[l][r]都算出来,然后用dp[l][r]求区间最大值 
    */
    #include<bits/stdc++.h>
    using namespace std;
    #define maxn 5005
    #define ll long long
    ll f[maxn][maxn],dp[maxn][maxn];
    ll n,a[maxn];
    
    void init(){
        for(int i=1;i<=n;i++)f[i][i]=a[i];
        for(int len=2;len<=n;len++)
            for(int l=1;l+len-1<=n;l++){
                int r=l+len-1;
                f[l][r]=f[l][r-1]^f[l+1][r];
            }
        for(int i=1;i<=n;i++)dp[i][i]=a[i];
        for(int len=2;len<=n;len++)
            for(int l=1;l+len-1<=n;l++){
                int r=l+len-1;
                dp[l][r]=f[l][r];
                dp[l][r]=max(dp[l][r],max(dp[l+1][r],dp[l][r-1]));
            }
    }
    
    int main(){
        cin>>n;
        for(int i=1;i<=n;i++)cin>>a[i];
        init();
        int q;cin>>q;
        while(q--){
            int l,r;
            cin>>l>>r;
            cout<<dp[l][r]<<'
    ';
        }
    } 
  • 相关阅读:
    Jmeter之断言处理
    JMeter工具简单介绍
    TCP的三次握手和四次挥手
    浅谈cookie、session
    浅谈HTTP中Get与Post的区别
    DNS原理入门
    互联网协议简介
    测试与部署
    部分代码片段
    apache和php扩展问题
  • 原文地址:https://www.cnblogs.com/zsben991126/p/11172264.html
Copyright © 2011-2022 走看看