zoukankan      html  css  js  c++  java
  • Codeforces Round #483 (Div. 2) D. XOR-pyramid dp的应用

    input:

    6
    1 2 4 8 16 32
    4
    1 6
    2 5
    3 4
    1 2

    output:

    60
    30
    12
    3

    刚开始没有看到要取最大值,就一直在哪里找哪里错了,仔细一看原来有一个最大的需要。

    思路:用一个数组存好每两个数之间的^数值,然后比较^的数、以及推出^的两个数,在三个数中找最大值,然后存进数组中。

    单纯的dp。

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 const int maxn=5006;
     5 int dp[maxn][maxn];
     6 int n;
     7 
     8 int main()
     9 {
    10     ios_base::sync_with_stdio(0); cin.tie(0);
    11     cout.tie(0);
    12     while( cin >> n){
    13         for(int i=1;i<=n;i++){
    14             cin >> dp[1][i];
    15         }
    16         for(int i=2;i<=n;i++)
    17             for(int j=1;j<=n-i+1;j++)
    18                 dp[i][j]=dp[i-1][j]^dp[i-1][j+1];
    19 
    20         for(int i=2;i<=n;i++){
    21             for(int j=1;j<=n-i+1;j++)
    22                 dp[i][j]=max(dp[i][j],max(dp[i-1][j],dp[i-1][j+1]));
    23         }
    24 
    25         int kk;
    26         cin >> kk;
    27         while(kk--){
    28             int x,y;
    29             cin >> x >> y;
    30             int mid=y-x+1;
    31             cout << dp[mid][x] << endl;
    32         }
    33     }
    34 
    35     return 0;
    36 }
  • 相关阅读:
    Keyboarding题解
    埃及分数 解题报告
    小木棍加强版解题报告
    扩展欧几里得
    luoguP4999 烦人的数学作业
    中国剩余定理
    20201115gryz模拟赛解题报告
    扩展欧几里得算法
    斐蜀定理
    CSP2020-S游记
  • 原文地址:https://www.cnblogs.com/ZQUACM-875180305/p/9047413.html
Copyright © 2011-2022 走看看