• 2018 计蒜之道 初赛 第二场


    题解:dp[a[i]]=max(dp[a[i]-d]~dp[a[i]+d])。

    感受:学会看数据啊,刚开始想的是贪心,发现可以不连续,看了数据,想了分块,线段树。。。最后发现可以dp。刚好一个小时

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 #include<algorithm>
     5 using namespace std;
     6 
     7 const int maxn = 100005;
     8 
     9 int T, n, d;
    10 int a[maxn], dp[maxn];
    11 
    12 int main()
    13 {
    14     cin >> T;
    15     while (T--) {
    16         cin >> n >> d;
    17         memset(dp, 0, sizeof(dp));
    18         for (int i = 1; i <= n; i++) cin >> a[i];
    19         dp[a[1]] = 1;
    20         for (int i = 2; i <= n; i++) {
    21             int start = max(1, a[i] - d);
    22             int end = min(100000, a[i] + d);
    23             int ans = 0;
    24             for (int j = start; j <= end; j++) {
    25                 ans = max(ans, dp[j]);
    26             }
    27             dp[a[i]] = ans + 1;
    28         }
    29         int ans = 0;
    30         for (int i = 1; i <= 100000; i++) ans = max(ans, dp[i]);
    31         cout << ans << endl;
    32     }
    33     return 0;
    34 }
  • 相关阅读:
    Redis开发与运维:SDS
    Redis开发与运维:数据迁移
    我的2019上半年
    C# 并发编程
    经典排序算法 — C# 版(上)
    图解 -- 树的汇总
    图解--队列、并发队列
    栈到CLR
    我们的数组
    算法复杂度
  • 原文地址:https://www.cnblogs.com/zgglj-com/p/9034112.html
Copyright © 2020-2023  润新知