2018 计蒜之道 初赛 第二场

Posted 啦啦啦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 }

 

以上是关于2018 计蒜之道 初赛 第二场的主要内容,如果未能解决你的问题,请参考以下文章

2017计蒜之道 初赛 第二场 百度的科学计算器(简单)

2018 计蒜之道 初赛 第三场

2018 计蒜之道 初赛 第一场

2018 计蒜之道 初赛 第一场

2018 计蒜之道 初赛 第三场

2018 计蒜之道 初赛 第一场