题目链接:http://codeforces.com/contest/813/problem/D

题意:求两个不相交的子集长度之和最大是多少,能放入同一子集的条件是首先顺序不能变,然后每一个相邻的要么相差1或者相差7的倍数。

题解:应该会想到是dp,看数据量有可能是二维的不妨设dp[i][j],由于这里只需要求两组所以dp[i][j]要表示为一组以i为结尾,一组以j为结尾。那么如何更新dp?

i=j时dp[i][j]=0没什么好说的。这里可以选择一个基准遍历结尾小的,更新结尾大的。为什么要这么选?

假设x>y,如果更新dp[x][y]是从dp[x][i]来的话可能不能确保以x为结尾的最大值不经过i点。所以要更新dp[i][y]。大致思路是这样的具体看一下代码是怎么实现的。

#include <iostream>
#include <cstring>
using namespace std;
const int M = 5e3 + 10;
const int N = 1e5 + 10;
int a[M];
int maxmod[8];//a[i] mod 7 == j 时dp[i][y]的最大值
int maxnum[N];//a[i] == j 时dp[i][y]的最大值
int dp[M][M];
int main() {
int n;
cin >> n;
for(int i = 1 ; i <= n ; i++) cin >> a[i];
memset(dp , 0 , sizeof(dp));
int ans = 0;
for(int i = 0 ; i <= n ; i++) {
memset(maxmod , 0 , sizeof(maxmod));
memset(maxnum , 0 , sizeof(maxnum));
for(int j = 1 ; j <= i ; j++) {
maxmod[a[j] % 7] = max(maxmod[a[j] % 7] , dp[i][j]);
maxnum[a[j]] = max(maxnum[a[j]] , dp[i][j]);
}
for(int j = i + 1 ; j <= n ; j++) {
dp[i][j] = max(dp[i][0] + 1 , dp[i][j]);
dp[i][j] = max(maxmod[a[j] % 7] + 1 , dp[i][j]);
dp[i][j] = max(maxnum[a[j] + 1] + 1 , dp[i][j]);
dp[i][j] = max(maxnum[a[j] - 1] + 1 , dp[i][j]);
maxmod[a[j] % 7] = max(maxmod[a[j] % 7] , dp[i][j]);
maxnum[a[j]] = max(maxnum[a[j] + 1] , dp[i][j]);
dp[j][i] = dp[i][j];
ans = max(ans , dp[i][j]);
}
}
cout << ans << endl; return 0;
}

最新文章

  1. 斐波拉契数列加强版——时间复杂度O(1),空间复杂度O(1)
  2. 在Spring中轻松写日志
  3. 缩小窗口时CSS背景图出现右侧空白BUG的解决方法
  4. 利用yii2 gridview实现批量删除案例[转]
  5. How to get http response.
  6. AX 2012 Form and Parts
  7. js实现图片向上播放(轮番滚动)
  8. Trie树也称字典树
  9. algorithm@ lower_bound implementation(Binary Search)
  10. virtualbox共享文件夹无访问权限问题解决方法
  11. 成员函数的const不能被修改,包括指针
  12. python基础(二)- 字符串
  13. windows10环境下的RabbitMQ安装步骤(图文)
  14. SpringMVC云题库错题及答案汇总
  15. 获取checkbox勾选的id
  16. 用VSCode写Vue要用到的配置
  17. 【C/C++】小坑们
  18. 移动端meta设置
  19. MySQL循环语句实例教程 mysql while循环测试
  20. hdu2571 命运 2016-09-11 16:54 53人阅读 评论(0) 收藏

热门文章

  1. ASP.NET Core Web Api之JWT刷新Token(三)
  2. Ubuntu 执行chmod -R 777 / 挽救方法
  3. 大型系列课程之-七夕告白之旅Electron篇
  4. 使用Yapi展示你的api接口
  5. python多线程同步实例分析
  6. Stream和方法引用
  7. Kubernetes-保障集群内节点和网络安全
  8. Flink 源码解析 —— Standalone Session Cluster 启动流程深度分析之 Job Manager 启动
  9. 性能测试学习第一天-----概念、环境、LR录制&amp;参数化
  10. 【畅通工程 HDU - 1232 】【并查集模板】