博客
关于我
hdu5900 QSC and Master (区间DP)
阅读量:388 次
发布时间:2019-03-05

本文共 1521 字,大约阅读时间需要 5 分钟。

为了解决这个问题,我们需要找到一种方法来最大化从给定的对中选择的总分。每次只能选择两个连续的对,并且这两个对的键的最大公约数(gcd)必须大于1。

方法思路

我们可以使用动态规划来解决这个问题。具体步骤如下:

  • 问题分析:我们需要选择连续的对,并且每次只能选择两个相邻的对。如果这两个对的键的gcd大于1,那么这两个对就可以被选中。我们的目标是找到这些对的最大总和。

  • 动态规划定义:定义一个数组dp,其中dp[i]表示从第i个对开始的最大总分。

  • 状态转移:对于每个位置i,如果ii+1的键的gcd大于1,那么我们可以选择这两个对,并加上从i+2开始的最大总分。如果i+2超出数组范围,则直接加上这两个对的值。否则,dp[i]的值取决于dp[i+1]

  • 递推公式

    • 如果gcd(a[i], a[i+1]) > 1
      • 如果i+2 < N,则dp[i] = v[i] + v[i+1] + dp[i+2]
      • 否则,dp[i] = v[i] + v[i+1]
    • 否则,dp[i] = dp[i+1]
  • 解决代码

    #include 
    #include
    using namespace std;int gcd(int a, int b) { while (b != 0) { int temp = a % b; a = b; b = temp; } return a;}int main() { int T; cin >> T; for (int _ = 0; _ < T; ++_) { int N; cin >> N; vector
    a(N); vector
    v(N); for (int i = 0; i < N; ++i) { cin >> a[i]; cin >> v[i]; } vector
    dp(N, 0); for (int i = N - 2; i >= 0; --i) { if (gcd(a[i], a[i + 1]) > 1) { if (i + 2 < N) { dp[i] = v[i] + v[i + 1] + dp[i + 2]; } else { dp[i] = v[i] + v[i + 1]; } } else { dp[i] = dp[i + 1]; } } cout << dp[0] << endl; }}

    代码解释

    • 读取输入:首先读取测试用例的数量T,然后对于每个测试用例,读取对数的数量N,接着读取键和值数组。
    • 动态规划数组初始化:创建一个dp数组,长度与对数数量相同,初始化为0。
    • 填充dp数组:从倒数第二个位置开始遍历,逐步计算每个位置的最大总分。
    • 输出结果:对于每个测试用例,输出dp[0],即从第一个对开始的最大总分。

    这种方法确保了我们能够在O(N^2)的时间复杂度内解决问题,适用于给定的数据范围。

    转载地址:http://agewz.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现 Greedy Best First Search最佳优先搜索算法(附完整源码)
    查看>>
    Objective-C实现 jugglerSequence杂耍者序列算法 (附完整源码)
    查看>>
    Objective-C实现 lattice path格子路径算法(附完整源码)
    查看>>
    Objective-C实现1000 位斐波那契数算法(附完整源码)
    查看>>
    Objective-C实现2 个数字之间的算术几何平均值算法(附完整源码)
    查看>>
    Objective-C实现2d 表面渲染 3d 点算法(附完整源码)
    查看>>
    Objective-C实现2D变换算法(附完整源码)
    查看>>
    Objective-C实现3n+1猜想(附完整源码)
    查看>>
    Objective-C实现3n+1猜想(附完整源码)
    查看>>
    Objective-C实现9x9乘法表算法(附完整源码)
    查看>>
    Objective-C实现9×9二维数组数独算法(附完整源码)
    查看>>
    Objective-C实现A*(A-Star)算法(附完整源码)
    查看>>
    Objective-C实现A-Star算法(附完整源码)
    查看>>
    Objective-C实现abbreviation缩写算法(附完整源码)
    查看>>
    Objective-C实现ABC人工蜂群算法(附完整源码)
    查看>>
    Objective-C实现activity selection活动选择问题算法(附完整源码)
    查看>>
    Objective-C实现AC算法(Aho-Corasick) 算法(附完整源码)
    查看>>
    Objective-C实现adaboost算法(附完整源码)
    查看>>
    Objective-C实现Adler32算法(附完整源码)
    查看>>
    Objective-C实现AES算法(附完整源码)
    查看>>