解题报告-序列(alis.*)

news/2025/9/28 19:42:58/文章来源:https://www.cnblogs.com/Starpop/p/19117465

序列(alis.*)

题目描述

现在 yxr 给你一个数列,求出此数列的最长递增子序列(不一定连续)的长度。

如果问题就那么简单就好了。哈哈。

现在这个问题还有第 \(2\) 问,设此长度为 \(K\),求此数列可以同时取出多少个长度为K的递增子序列(每个数最多出现在一个子序列中)。

输入描述

第一行:一个整数 \(N\),表示数列长度。

第二行:有 \(N\) 个整数,表示这个数列。

输出描述

第一行:一个整数 \(K\),表示最长递增子序列的长度。

第二行:一个整数,表示最多可以同时取出多少个长度为 \(K\) 的递增子序列。

输入输出样例 #1

输入样例 #1

6
1 1 2 3 4 6

输出样例 #1

5
1

说明/提示

样例#1解释

\(K\) 明显是 \(5\)

然后可以同时取出的子序列只有 (\(1,2,3,4,6\))。

数据范围

  • 对于 \(40\)% 的数据:\(1 \leq N \leq 30\)
  • 对于 \(100\)% 的数据:\(1 \leq N \leq 1000\)

U613779 序列 - 洛谷解题报告

网络流建模题。

第一问就不说了,就是求 LIS 而已。我用的是树状数组优化 DP。

重点是第二问。

显然,由于同一个数不能被多次使用,相当于一个最小性限制。于是我们可以用最大流处理。

设我们已经计算出动规数组 DP,其中 \(dp[i]\) 表示以位置 \(i\) 结尾的 LIS 长度,最长的 LIS 的长度为 \(len\)

具体的,我们进行以下操作:

  • 将每个点 \(i\) 拆成两个点 \(i_{in}\)\(i_{out}\),连一条 \(i_{in} \rightarrow i_{out}\) 的边,容量为 \(1\),表示每个数只能用一次。
  • 建立总汇点 \(t\),对于所有满足 \(dp[i]=len\) 的位置 \(i\),连一条 \(i_{out} \rightarrow t\) 的边,容量为 \(+\infin\)
  • 建立总源点 \(s\),对于所有满足 \(dp[i]=1\) 的位置 \(i\),连一条 \(s \rightarrow i_{in}\) 的边,容量为 \(+\infin\)
  • 对于 \(\forall 1\leq i \leq j \leq N\),如果有 \(dp[i]+1==dp[j]\) 且在原数列 \(X\)\(x[i]<x[j]\),连一条 \(i_{out} \rightarrow j_{in}\) 的边,容量为 \(+\infin\)。这表示 \(dp[j]\) 可从 \(dp[i]\) 继承而来。

这就完事了,不过一开始的测试数据是有问题的……

代码如下:

#include<bits/stdc++.h>
using namespace std;
const int INF=0x3f3f3f3f;
const int N=101100;#define ckmax(x,y) ( x=max(x,y) )
#define ckmin(x,y) ( x=min(x,y) )inline int read()
{int f=1,x=0; char ch=getchar();while(!isdigit(ch)) { if(ch=='-') f=-1; ch=getchar(); }while(isdigit(ch))  { x=x*10+ch-'0';    ch=getchar(); }return f*x;
}int n,w[N];
int len,ans;
int dp[N],U[N];
int NUM[N],top;#define lowbit(x) (x&(-x))
int T[N];void update(int x,int val)
{for(x;x<=n;x+=lowbit(x))ckmax(T[x],val);
}int query(int x)
{int sum=0;for(;x>0;x-=lowbit(x))ckmax(sum,T[x]);return sum;
}struct edge
{ int next,to,val; };
int head[N],cur[N],tot;
int s,t,lv[N];
edge e[N<<1];inline void add_edge(int from,int to,int val)
{e[tot].next=head[from];e[tot].to=to;e[tot].val=val;head[from]=tot++;
}inline void DoubleEdge(int u,int v,int w)
{add_edge(u,v,w);add_edge(v,u,0);
}inline bool level(int s,int t)
{memset(lv,0,sizeof(lv)); lv[s]=1;queue<int> q; q.push(s);while(!q.empty()){int u=q.front(); q.pop();if(u==t) return true;for(int i=head[u];~i;i=e[i].next){int v=e[i].to;if(e[i].val<1||lv[v])continue;lv[v]=lv[u]+1;q.push(v);}}return false;
}int FindFlow(int u,int flow)
{if(u==t) return flow;else{int F=0;for(int &i=cur[u];~i&&F<flow;i=e[i].next){int v=e[i].to;if(e[i].val<1||lv[v]!=lv[u]+1)continue;int w=FindFlow(v,min(e[i].val,flow-F));F+=w;e[i].val-=w;e[i^1].val+=w;}return F;}
}inline int Dinic(int s,int t)
{int x,ans=0;while(level(s,t)){memcpy(cur,head,sizeof(head));while((x=FindFlow(s,INF)))ans+=x;}return ans;
}signed main()
{freopen("alis.in","r",stdin);freopen("alis.out","w",stdout);memset(head,-1,sizeof(head));n=read();for(int i=1;i<=n;i++)NUM[++top]=(w[i]=read());sort(NUM+1,NUM+top+1);top=unique(NUM+1,NUM+top+1)-NUM-1;for(int i=1;i<=n;i++)w[i]=lower_bound(NUM+1,NUM+top+1,w[i])-NUM;for(int i=1;i<=n;i++){dp[i]=query(w[i]-1)+1;update(w[i],dp[i]);}for(int i=1;i<=n;i++) ckmax(len,dp[i]);s=0,t=n<<2;for(int i=1;i<=n;i++) DoubleEdge(i,i+n,1);for(int i=1;i<=n;i++) if(dp[i]==1)   DoubleEdge(s,i,INF);for(int i=1;i<=n;i++) if(dp[i]==len) DoubleEdge(i+n,t,INF);for(int i=1;i<=n;i++)for(int j=i+1;j<=n;j++)if(dp[i]+1==dp[j] && w[i]<w[j])DoubleEdge(i+n,j,INF);ans=Dinic(s,t);printf("%d\n%d",len,ans);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/921048.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PostgreSQL patroni 高可用 4:HAProxy和Keepalived实现读写分离

PostgreSQL patroni 高可用 4:HAProxy和Keepalived实现读写分离PostgreSQL patroni高可用PostgreSQL patroni 高可用 1:ectd 安装和配置PostgreSQL patroni 高可用 2:patroni安装和配置PostgreSQL patroni 高可用 3…

商城网站做推广wordpress woo

这篇文章非常好&#xff0c;必须转载。目录(?)[-] Kernel Space Display架构介绍函数和数据结构介绍函数和数据结构介绍函数和数据结构介绍数据流分析初始化过程分析User Space display接口Kernel display接口典型应用flow分析介绍 Surface manager&#xff08;surface flinge…

c 网站开发数据库连接网站优化推广招聘

原文来源&#xff1a;arXiv作者&#xff1a;Aidin Ferdowsi、 Ursula Challita、Walid Saad、Narayan B. Mandayam「雷克世界」编译&#xff1a;嗯~是阿童木呀、KABUDA对于自动驾驶汽车&#xff08;AV&#xff09;而言&#xff0c;要想在未来的智能交通系统中以真正自主的方式运…

各大网站收录提交入口网站服务器 安全

在 CentOS 7 中设置系统级代理需要几个步骤。以下是设置系统级代理的方法&#xff1a; 设置环境变量: 编辑 /etc/environment 文件&#xff1a; sudo nano /etc/environment添加以下行&#xff08;替换 proxy_server 和 port 为您的实际代理服务器地址和端口&#xff09;&am…

Cloudbox工具箱!一款拥有100款工具的超级工具箱!Cloudbox工具箱教程(附下载)

软件介绍 Cloudbox 工具箱:一款开源免费的 Windows 聚合工具箱,仅 7.6M 大小却集成 198 款工具,涵盖装机检测、系统优化、影音下载等四大类功能,提供绿色免安装软件,能简化装机流程,降低流氓软件捆绑风险。 软件…

java 语法基础课后作业

1:仔细阅读示例: EnumTest.java,运行它,分析运行结果? 你能得到什么结论?你掌握了枚举类型的基本用法了吗?import java.util.*; public enum MyEnum{ ONE, TWO, THREE } class Main{ public static void main(Str…

成都做网站的工资多少如何创立自己的网站

我这个错误是跑完MRP&#xff0c;然后在MD04查看在库/所有量一览&#xff0c; 点计划手配&#xff08;Planned order 计划订单&#xff09;生成 制造指图&#xff08;Production order 生产订单&#xff09;&#xff0c; 到目前这几步都OK&#xff0c;然后在制造指图界面点保…

Lightroom使用教程!一文学会Lightroom使用教程!软件攻略(批量处理)

软件介绍 Lightroom是Adobe Systems开发的一款专业的照片编辑和管理软件,专为摄影师和图像处理专业人士设计。lr修图软件携带的桥正工具,组织功能以及灵活的打印选项,可以帮助用户加快图片后期处理速度,将更多时间…

C++篇 String实现避坑指南:搞定构造,拷贝与析构,增删查改,流提取流插入与比对大小 一文全解 - 教程

C++篇 String实现避坑指南:搞定构造,拷贝与析构,增删查改,流提取流插入与比对大小 一文全解 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: bl…

深入解析:基于机器学习的智能贫血分析预测系统

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

AT_agc026_c [AGC026C] String Coloring

首先考虑 \(n \le 18\),折半搜索。 用哈希,发现就是进制数合并,用 map 记录正着和反着的哈希值折半合并即可。

苏州市建设交易中心网站首页wpzoom wordpress cms

Go 使用 Gorm 将操作信息集成到链路跟踪 Jaeger,进行增删改查使用举例(附源码)。 为了增强程序的可观测性,方便问题定位,在发起数据库操作请求时我们也可以调用代码统一集成链路跟踪的能力,Jaeger 是当今比较流行的选择。使用 Gorm 来将操作信息集成到 Jaeger 中。 全面…

启发式合并 [PA 2014] Fiolki

关于启发式合并 在我们愉快打暴力的时候,我们会遇到需要合并一些数据的情况。 我们举一个相当简单的例子,我们需要很多次合并一些 vector,这个时候作为人类我们会想从小的里边取放到大的里边。 若我们需要大到小,就…

反转链表-leetcode

题目描述 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1:输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1]示例 2:输入:head = [1,2] 输出:[2,1]示例 3: 输入:head = [] 输出:[]提示:链表…

旅游网站建设方案后台组件化网站建设

为什么实际开发中不推荐使用外键&#xff1f; 只有一个场景不能使用外键&#xff0c;就是分库分表&#xff0c;其它描述都不是真正原因。 性能问题&#xff1f; 数据库的瓶颈在IO&#xff0c;不使用外键代码里做数据完整性检查&#xff0c;磁盘IO省不了&#xff0c;网络IO占用…

深圳seo网站设计一元钱购买网站空间

目录 1 下载Qt 1.1 官方下载 1.2 百度网盘下载 1.3 Linux虚拟机终端下载 2 Qt安装 3 安装相关依赖 4 测试安装 1 下载Qt 1.1 官方下载 通过官网下载对应版本&#xff0c;本文选择的版本为qt-opensource-linux-x64-5.12.12&#xff0c;Qt官方下载链接&#xff1a;htt…

php 网站开发框架apps 制作网站

来源&#xff1a;DeepTech深科技近日&#xff0c;苹果官方发布一份招聘信息&#xff0c;其中有一个职位就非常惹人注意&#xff0c;根据信息&#xff0c;苹果准备招募两名蜂窝调制解调器系统架构师&#xff0c;一名构架师的工作地点在圣克拉拉&#xff0c;另一名构架师的工作地…

专业网站建设费用包括哪些wordpress文字块

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

完整教程:Nginx HTTPS 深入实战 配置、性能与排查全流程(Nginx https

完整教程:Nginx HTTPS 深入实战 配置、性能与排查全流程(Nginx httpspre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &…

第45篇:AI+交通:自动驾驶、智能交通管理与出行优化 - 实践

第45篇:AI+交通:自动驾驶、智能交通管理与出行优化 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Conso…