前言

线性DP是世界上最难的算法!!(我在口胡)
前言 : https://ac.nowcoder.com/acm/contest/11215/C

思路

看完该题之后 (问的什么鬼 贪心?排序之后交替拿? 样例都没过笑死 QAQ)

认真分析一波,转换模型

这题其实再问 满足条件的最长序列长度

条件就是 当前的 c和a 与上一个 不同 :(DP的样子出来了是不是)

因此需要求的状态就是 f[i]即当前最长的序列长度

状态转移 :

因为这个可以乱序拿 我们不能从 i-1或者 i 之前的直接枚举出来

我们可以通过 a 来枚举 (因为他才10)

所以我们可以通过 ^(异或) 以及一个 pre 数组 枚举a 然后来进行状态转移

即 f [ i ] = max ⁡ ( f [ i ] , f [ pre ⁡ [ c [ i ] ∧ 1 ] [ j ] ] + 1 ) f[i]=\max \left(f[i], f\left[\operatorname{pre}\left[c[i]^{\wedge} 1\right][j]\right]+1\right) f[i]=max(f[i],f[pre[c[i]∧1][j]]+1)

因此这样子就简单的推下来了

(可真 简单 是吧?)

CODE

/**
f[i]表示当前合法的长度可以由 前面不一样的推导过来
f[i]  = f[c[i][j]]
**/
#include <bits/stdc++.h>
using namespace std;
const int N = 3e5+10;
int t,n;
int c[N],a[N],f[N],pre[N][15];
void solve()
{memset(f,0,sizeof f);memset(pre,0,sizeof pre);int ans = 0 ;cin>>n;for(int i=1;i<=n;i++)cin>>c[i]>>a[i];for(int i=1;i<=n;i++){for(int j=1;j<=10;j++){if(a[i] == j) continue;f[i] = max(f[i],f[pre[c[i]^1][j]]+1);pre[c[i]][a[i]] = i;ans = max(ans,f[i]);}}cout<<ans<<endl;}
int main()
{ios::sync_with_stdio(false);cin>>t;while(t -- )solve();return 0;
}

[nk] 糟糕的打谱员 线性DP相关推荐

  1. 糟糕的打谱员(dp)

    糟糕的打谱员 比赛主页 我的提交 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 众所周知 ...

  2. 0x51.动态规划 - 线性DP(习题详解 × 10)

    目录 0x51.动态规划 - 线性DP 0x51.1 LIS问题 Problem A. 登山 (最长下降子序列) Problem B. 友好城市(思维) Problem C. 最大上升子序列和 0x5 ...

  3. 动态规划:线性dp、背包问题、区间3

    区间DP 2955 -- Brackets 给定一个由字符 a1a2 ... an 组成的括号序列,你的目标是找到最长的正则括号序列的长度,它是 s 的子序列.也就是说,您希望找到最大的 m,使得对于 ...

  4. 用什么心态对待水平糟糕的程序员[不靠谱的程序员、思路紊乱的程序员]?

    这些年遇到了很多糟糕的程序员,其实真正是写程序料的人,普通IT公司大概只占1/3左右吧,其实有2/3的人都太适合当程序员,还不如早点儿改行该干啥就干啥了,其中有1/10的人往往是相对比较糟糕的. 01 ...

  5. UVA11584 划分成回文串 Partitioning by Palindromes(线性DP划分+DP判断回文串)

    整理的算法模板合集: ACM模板 依旧是线性DP 我们使用闫氏DP分析法 总体DP转移的时间复杂度为O(n2)O(n^2)O(n2). 但是这里牵扯到判断 i\tt ii 到 j\tt jj 是否为回 ...

  6. 十个行为把你变成糟糕的程序员

    十个行为把你变成糟糕的程序员 http://developer.51cto.com/art/201107/276255.htm 程序员当然也是分级别的,不是所有的程序员都是一个合格或是优秀的程序员.建 ...

  7. 洛谷P2401 不等数列(线性DP)

    本题使用的是线性DP.就是DP数组难以思考,这里我直接给出 dp[i][j]:表示 1 ~ i 这 i 个数 , 其中j 个 " < " 有几种方法 假设我们已经把 n - ...

  8. CodeForces - 1096D Easy Problem(线性dp)

    题目链接:点击查看 题目大意:给出一个字符串,每个字符都有一个权值,现在需要删除权值和最少的字符,满足字符串中不再含有子序列"hard" 题目分析:线性dp,但我不会,看着题解写的 ...

  9. CodeForces - 456C Boredom(线性dp)

    题目链接:点击查看 题目大意:给出一个由n个数字组成的数列,现在给出规则是,每次选择数列中的一种数字 x,选择后的贡献为 x,不过操作后会删除掉所有数值为 x + 1 和 x - 1 的数,现在问如何 ...

最新文章

  1. java set 包含_Java Set.contains()方法:判断Set集合是否包含指定的对象
  2. linux shell 脚本练习,shell脚本小练习
  3. PKI/CA (3)CA功能细分
  4. html 手机a标签点不动,htmlunit单击javascript a标签不起作用
  5. 如何获取FragmentTabHost中指定标签页的Fragment
  6. 为什么mysql启动不了了_Mysql为什么启动不了
  7. 手记 《半年工作经验今日头条和美团面试题面经分享》
  8. 深度学习-扩展数据集
  9. Windows Workflow RC HOL学习笔记(四):使用Listen,Delay和event-based自定义Activities
  10. OpenGL超级宝典(第7版)环境配置和相关问题
  11. 青蓝电影质感LR预设达芬奇/PS/PR/LUT人像lightroom胶片调色滤镜插件
  12. centos6.5安装ansible和tower
  13. 计算机键盘正确指法,键盘指法,详细教您盲打及快速打字指法练习的步骤
  14. 知识图谱概论(二):概念具象化描述
  15. 2013年大学英语专升本作文——Should One Expect a Reward When Doing a Good Deed?【标准答案、精品范文答案】
  16. 链路不通或服务器没响应,连不通服务器服务怎么办(理论篇)
  17. WinDbg调试的前因后果
  18. GaussDB架构(下)
  19. 域名中不应出现下划线
  20. 罗斯蒙特3051变送器的优势在哪里?

热门文章

  1. IPTV的前世今生与发展
  2. 西门子1200PLC程序SCL数控G代码功能块源文件 S7-1200PLC程序SCL数控G代码功能块源文件
  3. 高新技术企业认证自助申请教程
  4. Unix 开机时如何自启动oracle
  5. 在线图片转文字怎么操作?
  6. Windows10系统时间同步没有效果的解决方法
  7. Cocos2d-x2.1.1-ClippingNodeTest 深入分析
  8. SqlServer数据库 时间类型字段添加默认值 设置时间格式
  9. win10命令行模式无法切换输入法
  10. 2023 HGAME网络攻防大赛wp