洛谷 P3657 [USACO17FEB]Why Did the Cow Cross the Road II P
2024-10-21 03:29:29
大意:让你把两个n的排列做匹配,连线不想交,而且匹配的数字的差<=4,求最大匹配数
sol:(参考了kczno1的题解)对于第一个排列从左往右枚举,用树状数组维护到达另一个序列第i个数字的最大值。
#include <cstdio>
#include <algorithm>
using namespace std;
const int N=;
int n,a[N],b[N],f[N],t[N];
#define lowbit(x) ((x)&(-x))
inline void ins(int x,int v){for(;x<=n;x+=lowbit(x)){if(t[x]>v)break;t[x]=v;}}
inline int que(int x){int re=; for(;x;x-=lowbit(x))re=max(re,t[x]);return re;}
int main()
{
int i,j,x; scanf("%d",&n);for(i=;i<=n;i++)scanf("%d",&a[i]);for(i=;i<=n;i++)scanf("%d",&x),b[x]=i;
for(i=;i<=n;i++)
{
for(j=max(,a[i]-);j<=min(n,a[i]+);j++)f[j]=que(b[j]-);
for(j=max(,a[i]-);j<=min(n,a[i]+);j++)ins(b[j],f[j]+);
}printf("%d\n",que(n));
}
--------------------分割线-下方无关----------------
大概是受了大佬的启发,我水掉了一个留了半年多的大坑(最长公共子序列的模板)直接贴链接和代码吧
#include <cstdio>
#include <algorithm>
using namespace std;
const int N=;
int n,a[N],b[N],f[N],t[N];
#define lowbit(x) ((x)&(-x))
inline void ins(int x,int v){for(;x<=n;x+=lowbit(x)){if(t[x]>v)break;t[x]=v;}}
inline int que(int x){int re=; for(;x;x-=lowbit(x))re=max(re,t[x]);return re;}
int main()
{
int i,x; scanf("%d",&n); for(i=;i<=n;i++)scanf("%d",&a[i]); for(i=;i<=n;i++)scanf("%d",&x),b[x]=i;
for(i=;i<=n;i++)
{
f[a[i]]=que(b[a[i]]-); ins(b[a[i]],f[a[i]]+);
}printf("%d\n",que(n));
}
最新文章
- SU54 新建视图簇 维护数据表
- java md5
- JavaScript模板引擎artTemplate.js——为什么使用模板引擎?
- 利用jQuery来扩展一个瀑布流插件
- The method getJspApplicationContext(ServletContext) is undefined for the type
- MySQL 5.1 参考手册CHM (官方 简体中文版)
- Birthday-24
- 在python中处理XML
- pdfkit安装使用
- 关于jquery ID选择器的一点看法
- C标准库函数实现之strstr(转)
- [OC Foundation框架 - 14] NSNull
- MVC +EF+linq 多表联查
- JS运动框架的封装过程(一)
- 201521123067 《Java程序设计》第12周学习总结
- 比较JqGrid与XtraGrid
- python codis集群客户端(一) - 基于客户端daemon探活与服务列表维护
- golang动态加载原生代码思路
- .net下使用socket.io随笔记录
- 炎黄流程中改流程节点颜色的js