当前位置: 首页 > news >正文

企业网站主页 优帮云yellow的视频播放

企业网站主页 优帮云,yellow的视频播放,网站策划厂,学院二级网站建设方案模板题意 Farmer John 饲养了 N N N 种奶牛,编号从 1 1 1 到 N N N。一些品种的奶牛和其他奶牛间相处良好,事实证明,如果两个品种的奶牛编号分别为 a , b a,b a,b,当 ∣ a − b ∣ ≤ 4 |a-b| \leq 4 ∣a−b∣≤4 时&#xff0c…

题意

Farmer John 饲养了 N N N 种奶牛,编号从 1 1 1 N N N。一些品种的奶牛和其他奶牛间相处良好,事实证明,如果两个品种的奶牛编号分别为 a , b a,b a,b,当 ∣ a − b ∣ ≤ 4 |a-b| \leq 4 ab4 时,这两个品种的奶牛能友好相处,否则不能友好相处。

一条长长的道路贯穿整个农场,道路的左侧有 N N N 个牧场(每个品种的奶牛恰好占据一个牧场),道路的右侧也有 N N N 个牧场(每个品种的奶牛恰好占据一个牧场)。为了让奶牛们安全穿过马路,Farmer John 希望能在马路上画出一些人行道(牛行道?),要求这些人行道满足如下条件:

  1. 人行道从左侧的某个牧场出发,连接到右侧的某个牧场;
  2. 人行道连接的两个牧场的奶牛要能友好相处;
  3. 人行道不能在道路中间相交;
  4. 每个牧场只能与一条人行道相连。

你需要帮 FJ 求出最多能有多少条人行道。

洛谷 P6119: 1 ≤ n ≤ 1000 1\le n\le 1000 1n1000:;

洛谷 P3657: 1 ≤ n ≤ 1 0 5 1\le n\le 10^5 1n105

本题解两个数据范围有不同解法。

思路(小数据)

这个数据支持 Θ ( n 2 ) \Theta(n^2) Θ(n2)

我们考虑枚举两侧的道路进行匹配。而题目要求道路不能交叉,那么得“一起推进”——其实是 dp。

f i , j f_{i,j} fi,j 表示, a a a 数组前 i i i 个、 b b b 数组前 j j j 个的最大匹配数。

如果 ∣ a i − b j ∣ ≤ 4 |a_i-b_j|\le 4 aibj4,那么就可以在左侧的 i i i 和 右侧的 j j j 建立道路(在接下来就不会在出现,左侧小于 i i i 的连接右侧大于 j j j 的的道路了)。
在这里插入图片描述
f i , j = max ⁡ { f i − 1 , j − 1 + 1 } , ∣ a i − b j ∣ ≤ 4 f_{i,j}=\max\{f_{i-1,j-1}+1\},|a_i-b_j|\le 4 fi,j=max{fi1,j1+1},aibj4

否则就不能建,那么从哪里转移过来呢?跳过 i i i j j j 其中一个点不建边就好了。
在这里插入图片描述
f i , j = max ⁡ { f i − 1 , j , f i , j − 1 } f_{i,j}=\max\{f_{i-1,j},f_{i,j-1}\} fi,j=max{fi1,j,fi,j1}

代码 1

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll N=1002; 
ll n,a[N],b[N];
ll f[N][N];
int main()
{scanf("%lld",&n);for(int i=1;i<=n;i++)scanf("%lld",&a[i]);for(int i=1;i<=n;i++)scanf("%lld",&b[i]);for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){f[i][j]=max(f[i][j],max(max(f[i-1][j],f[i][j-1]),f[i-1][j-1]));if(abs(a[i]-b[j])<=4)f[i][j]=max(f[i][j],f[i-1][j-1]+1);}}printf("%lld",f[n][n]);return 0;
}

思路(大数据)

虽然很典型,但是还是思维有点混乱,这种节点贡献的题目还是要多练。

能否考虑优化小数据的做法呢?省去一个维度?

对每一个 a i a_i ai,枚举可以和它配对的种类区间 [ a i − 4 , a i + 4 ] [a_i-4,a_i+4] [ai4,ai+4]

省去一维,设 f i f_i fi 表示,当前,右侧的种类 i i i 对应点 p o s i pos_i posi 作为配对的结尾的最大匹配数,然后更新 p o s i pos_i posi 的贡献为 f i + 1 f_i+1 fi+1

考虑用树状数组维护。

代码 2

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll N=1e5+9;
ll n,a[N],b[N],pos[N];//右位置 
ll f[N];
struct BT
{ll T[N];ll lowbit(ll x){return x&(-x);}void add(ll x,ll k){for(int i=x;i<=n;i+=lowbit(i))T[i]=max(T[i],k);}ll query(ll x){x=min(x,n),x=max(x,0ll);ll ret=0;for(int i=x;i>=1;i-=lowbit(i))ret=max(ret,T[i]);return ret;}
}B;
int main()
{scanf("%lld",&n);for(int i=1;i<=n;i++)scanf("%lld",&a[i]);for(int i=1;i<=n;i++){scanf("%lld",&b[i]);pos[b[i]]=i;}for(int i=1;i<=n;i++){//符合条件的品种区间 for(int j=max(a[i]-4,1ll);j<=min(a[i]+4,n);j++)f[j]=B.query(pos[j]-1);for(int j=max(a[i]-4,1ll);j<=min(a[i]+4,n);j++)B.add(pos[j],f[j]+1);}ll ans=B.query(n);printf("%lld",ans);return 0;
}
http://www.dtcms.com/a/460325.html

相关文章:

  • 网站建设负责那内容上传吗引流推广推广微信hyhyk1效果好
  • 成都网站建设 外包宁波鄞州区商用高端网站设计
  • 网站3级营销是怎么做的中国中国建设银行网站首页
  • 网站分享到朋友圈代码网站策划书的撰写流程
  • 备案要关闭网站吗苏州市工业园区规划建设局网站
  • 传播公司可以做门户网站吗wordpress展示产品
  • 上海网站制作用asp做网站有哪些功能
  • 基于html的个人网站的设计与实现论文网页设计公司介绍怎么写
  • 查公司的国家网站有哪些超实用网站
  • 环球贸易网国际站设计公司企业标志
  • 简单的网站模板wap医院网站模板 for dedecms v1.0
  • 连云港网站建设报价手机就可以直接做设计的网站
  • 资讯型电商网站优缺点工作总结写作
  • wordpress定时网站地图阜阳学校网站建设
  • 易企网站建设网站seo其应用
  • 域名做网站名网站建设 案例展示
  • 西安做网站公司xamokj怎么做网页小精灵
  • 地方门户网站管理系统做化工的外贸网站都有什么地方
  • 网站建设优化佛山网站注册页面
  • 朝阳网站建设wordpress 列表页输出
  • 银川网站建设一条龙服务网站怎么做才 吸引人
  • 为什么自己做不出一个好网站手机编程软件中文版免费
  • 萝岗门户网站建设公众号怎么运营
  • 成都网站建设优惠活动东莞找网站设计
  • 丹阳网站建设如何WordPress微信强制跳转插件
  • 无锡网站制作企业中文wordpress主题下载地址
  • 视频网站直播怎么做的城市生活网官方网站app
  • 南宁网站定制公司推广之家
  • 自己建网站流程要学什么上海猎头公司名录
  • 免费网站推广怎么做个人网页设计ps