博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
「luogu2766」最长不下降子序列问题
阅读量:4625 次
发布时间:2019-06-09

本文共 2409 字,大约阅读时间需要 8 分钟。

1 #include
2 using namespace std; 3 const int N=510,M=251000,oo=2e9; 4 int n,a[N],f[N],ss,tt; 5 struct Edge{ 6 int from,to,flow,cap; 7 Edge(int _from=0,int _to=0,int _flow=0,int _cap=0):from(_from),to(_to),flow(_flow),cap(_cap){} 8 }; 9 Edge edge[M<<1];10 int edge_tot,spe[10];11 vector
point[N<<1];12 void add_edge(int f,int t,int c){13 edge[edge_tot]=Edge(f,t,0,c);14 point[f].push_back(edge_tot++);15 edge[edge_tot]=Edge(t,f,0,0);16 point[t].push_back(edge_tot++);17 return;18 }19 int level[N<<1];20 bool bfs(){21 memset(level,0,sizeof(level));22 queue
q;23 q.push(ss);24 level[ss]=1;25 int x;26 while(!q.empty()){27 x=q.front();q.pop();28 for(int i=0;i
e.flow&&!level[e.to]){31 level[e.to]=level[x]+1;32 q.push(e.to);33 }34 }35 }36 return level[tt];37 }38 int dfs(int k,int aa){39 if(k==tt||!aa) return aa;40 int temp,ans=0;41 for(int i=0;i
e.flow&&level[e.to]==level[k]+1&&(temp=dfs(e.to,min(aa,e.cap-e.flow)))){44 ans+=temp,aa-=temp;45 e.flow+=temp,edge[point[k][i]^1].flow-=temp;46 }47 if(!aa) return ans;48 }49 return ans;50 }51 int dinic(){52 int ans=0;53 while(bfs()) ans+=dfs(ss,oo);54 return ans;55 }56 int main(){57 // freopen("in.txt","r",stdin);58 // freopen("out.txt","w",stdout);59 int ans1=0,ans2=0,ans3=0;60 scanf("%d",&n);61 ss=(n<<1)+1,tt=ss+1;62 for(int i=1;i<=n;i++) scanf("%d",&a[i]);63 a[n+1]=oo;64 for(int i=n;i;i--){65 for(int j=i+1;j<=n+1;j++) if(a[i]<=a[j]) f[i]=max(f[j]+1,f[i]);66 ans1=max(ans1,f[i]);67 }68 printf("%d\n",ans1);69 for(int i=1;i<=n;i++){70 if(i==1||i==n) spe[++spe[0]]=edge_tot;71 add_edge(i,i+n,1);72 if(f[i]==ans1){73 if(i==1) spe[++spe[0]]=edge_tot;74 add_edge(ss,i,1);75 }76 if(f[i]==1){77 if(i==n) spe[++spe[0]]=edge_tot;78 add_edge(i+n,tt,1);79 }80 }81 for(int i=1;i<=n;i++)82 for(int j=i+1;j<=n;j++) if(a[j]>=a[i]&&f[j]==f[i]-1)83 add_edge(i+n,j,1);84 ans2=dinic();85 printf("%d\n",ans2);86 for(int i=0;i

 

转载于:https://www.cnblogs.com/mycups/p/8527857.html

你可能感兴趣的文章
crm创建报告补充导航
查看>>
几种开源分词工具的比較
查看>>
等于null和长度0有区别,null不能调用任何方法,如Tostring 和.length 源于checkbox的未勾选返回值为null,勾选的返回值为on...
查看>>
项目管理专业 知识点总结(三)
查看>>
关于Android 打开新的Activity 虚拟键盘的弹出与不弹出
查看>>
“万能数据库查询分析器”在四大软件下载网站的排行榜中均入围前10,可喜可贺...
查看>>
和菜鸟一起学linux总线驱动之smartcard操作模式和协议与参数选择
查看>>
android 开发工具(转)
查看>>
python中的uuid4
查看>>
CSS 必知的7个知识点
查看>>
asp.net mvc 生成条形码
查看>>
单调队列
查看>>
Attribute value is quoted with " which must be escaped when used within the value 问题解决
查看>>
作业01
查看>>
web学习记录-JS-12
查看>>
ubuntu安装软件包apt-get和dpkg方法
查看>>
工作中vue项目前后端分离,调用后端本地接口出现跨域问题的完美解决
查看>>
BZOJ3894: 文理分科
查看>>
动态生成元素动作绑定,jquery 1.9如何实现
查看>>
C语言经典算法100例-032~35
查看>>