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

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

序列(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.gsyq.cn/news/13601.html

相关文章:

  • Cloudbox工具箱!一款拥有100款工具的超级工具箱!Cloudbox工具箱教程(附下载)
  • Lightroom使用教程!一文学会Lightroom使用教程!软件攻略(批量处理)
  • 启发式合并 [PA 2014] Fiolki
  • 完整教程:ISP的前处理和后处理是什么?
  • 《痞子衡嵌入式半月刊》 第 119 期
  • 运动控制卡排名
  • 基于Mysql+SpringBoot+vue框架-在线宠物用品交易网站的设计与实现 - 实践
  • labview打包应用
  • 完整教程:开源的 CSS 动画库
  • 【2025-09-27】连岳摘抄
  • CPU 测试脚本
  • Day23static详解
  • openssh升级
  • 实用指南:月匣 - 百度推出的AI情感陪伴与剧情互动应用
  • 完整教程:整合与超越:论“开源AI智能名片链动2+1模式S2B2C商城小程序”对传统红人直播带货模式的升维
  • 2025 最新隔音板厂家权威推荐排行榜:聚焦实力厂商,阻尼 / 聚酯纤维等全品类适配与标杆案例解析室外/KTV/隔音板安装/沈阳/ 厂房隔音板厂家推荐
  • 2025 年医疗器械注册咨询公司最新权威推荐排行榜:TOP 级服务商全流程能力解析,助力企业高效合规拿证医疗器械注册咨询//二类医疗器械注册咨询/三类医疗器械注册咨询公司推荐
  • 2025 年最新推荐地坪源头厂商权威排行榜:聚焦环氧 / 聚氨酯 / 固化剂等多类型地坪,精选 TOP5 优质企业水性聚氨酯/环氧/密封固化剂地坪施工厂商推荐
  • 算法篇
  • 如何找到当前计算机所有的UnrealEngine安装位置
  • 阿里云函数计算 AgentRun 全新发布,构筑智能体时代的基础设施
  • 大型语言模型(LLM)分类与特性全解析 - 教程
  • C语言 - 左移、右移运算符
  • 格雷厄姆指数
  • reLeetCode 热题 100- 42 接雨水 - MKT
  • ssti模板注入
  • 2025 年章丘二手磁选机厂家最新权威推荐排行榜:TOP 级企业设备全型号覆盖与五年质保深度解析二手立环磁选机/二手华特磁选机/章丘二手磁选机厂家推荐
  • 数据集Dataset
  • 2025 年三维扫描仪厂家最新权威推荐排行榜:覆盖空间 / 高精度 / 专业 / 手持激光 / 工业等类型,精选实力企业深度解析
  • 题解:AT_abc425_f [ABC425F] Inserting Process