[nk] 糟糕的打谱员 线性DP
前言
线性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相关推荐
- 糟糕的打谱员(dp)
糟糕的打谱员 比赛主页 我的提交 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 众所周知 ...
- 0x51.动态规划 - 线性DP(习题详解 × 10)
目录 0x51.动态规划 - 线性DP 0x51.1 LIS问题 Problem A. 登山 (最长下降子序列) Problem B. 友好城市(思维) Problem C. 最大上升子序列和 0x5 ...
- 动态规划:线性dp、背包问题、区间3
区间DP 2955 -- Brackets 给定一个由字符 a1a2 ... an 组成的括号序列,你的目标是找到最长的正则括号序列的长度,它是 s 的子序列.也就是说,您希望找到最大的 m,使得对于 ...
- 用什么心态对待水平糟糕的程序员[不靠谱的程序员、思路紊乱的程序员]?
这些年遇到了很多糟糕的程序员,其实真正是写程序料的人,普通IT公司大概只占1/3左右吧,其实有2/3的人都太适合当程序员,还不如早点儿改行该干啥就干啥了,其中有1/10的人往往是相对比较糟糕的. 01 ...
- UVA11584 划分成回文串 Partitioning by Palindromes(线性DP划分+DP判断回文串)
整理的算法模板合集: ACM模板 依旧是线性DP 我们使用闫氏DP分析法 总体DP转移的时间复杂度为O(n2)O(n^2)O(n2). 但是这里牵扯到判断 i\tt ii 到 j\tt jj 是否为回 ...
- 十个行为把你变成糟糕的程序员
十个行为把你变成糟糕的程序员 http://developer.51cto.com/art/201107/276255.htm 程序员当然也是分级别的,不是所有的程序员都是一个合格或是优秀的程序员.建 ...
- 洛谷P2401 不等数列(线性DP)
本题使用的是线性DP.就是DP数组难以思考,这里我直接给出 dp[i][j]:表示 1 ~ i 这 i 个数 , 其中j 个 " < " 有几种方法 假设我们已经把 n - ...
- CodeForces - 1096D Easy Problem(线性dp)
题目链接:点击查看 题目大意:给出一个字符串,每个字符都有一个权值,现在需要删除权值和最少的字符,满足字符串中不再含有子序列"hard" 题目分析:线性dp,但我不会,看着题解写的 ...
- CodeForces - 456C Boredom(线性dp)
题目链接:点击查看 题目大意:给出一个由n个数字组成的数列,现在给出规则是,每次选择数列中的一种数字 x,选择后的贡献为 x,不过操作后会删除掉所有数值为 x + 1 和 x - 1 的数,现在问如何 ...
最新文章
- java set 包含_Java Set.contains()方法:判断Set集合是否包含指定的对象
- linux shell 脚本练习,shell脚本小练习
- PKI/CA (3)CA功能细分
- html 手机a标签点不动,htmlunit单击javascript a标签不起作用
- 如何获取FragmentTabHost中指定标签页的Fragment
- 为什么mysql启动不了了_Mysql为什么启动不了
- 手记 《半年工作经验今日头条和美团面试题面经分享》
- 深度学习-扩展数据集
- Windows Workflow RC HOL学习笔记(四):使用Listen,Delay和event-based自定义Activities
- OpenGL超级宝典(第7版)环境配置和相关问题
- 青蓝电影质感LR预设达芬奇/PS/PR/LUT人像lightroom胶片调色滤镜插件
- centos6.5安装ansible和tower
- 计算机键盘正确指法,键盘指法,详细教您盲打及快速打字指法练习的步骤
- 知识图谱概论(二):概念具象化描述
- 2013年大学英语专升本作文——Should One Expect a Reward When Doing a Good Deed?【标准答案、精品范文答案】
- 链路不通或服务器没响应,连不通服务器服务怎么办(理论篇)
- WinDbg调试的前因后果
- GaussDB架构(下)
- 域名中不应出现下划线
- 罗斯蒙特3051变送器的优势在哪里?