HDU3998 Sequence 动态规划+最大流2011 Multi-University Training Contest 16 - Host by TJU
来源:互联网 发布:知豆高速没电了怎么办 编辑:程序博客网 时间:2024/05/16 11:40
Sequence
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 138 Accepted Submission(s): 43
as x[i1], x[i2],...,x[ik], which satisfies follow conditions:
1) x[i1] < x[i2],...,<x[ik];
2) 1<=i1 < i2,...,<ik<=n
As an excellent program designer, you must know how to find the maximum length of the
increasing sequense, which is defined as s. Now, the next question is how many increasing
subsequence with s-length can you find out from the sequence X.
For example, in one case, if s = 3, and you can find out 2 such subsequence A and B from X.
1) A = a1, a2, a3. B = b1, b2, b3.
2) Each ai or bj(i,j = 1,2,3) can only be chose once at most.
Now, the question is:
1) Find the maximum length of increasing subsequence of X(i.e. s).
2) Find the number of increasing subsequence with s-length under conditions described (i.e. num).
have n numbers.
#include<cstdio>#include<cstring>#include<vector>#include<algorithm>#define N 1005#define M 100005#define inf 999999999using namespace std;
int n,m,s,t,num,adj[N],dis[N],q[N],a[N],d[N];struct edge{ int v,w,pre;}e[M];void insert(int u,int v,int w){ e[num]=(edge){v,w,adj[u]}; adj[u]=num++; e[num]=(edge){u,0,adj[v]}; adj[v]=num++;}int bfs(){ int i,x,v,head=0,tail=0; memset(dis,0,sizeof(dis)); dis[s]=1; q[++tail]=s; while(head!=tail) { x=q[head=(head+1)%N]; for(i=adj[x];~i;i=e[i].pre) if(e[i].w&&!dis[v=e[i].v]) { dis[v]=dis[x]+1; if(v==t) return 1; q[tail=(tail+1)%N]=v; } } return 0;}int dfs(int x,int limit){ if(x==t) return limit; int i,v,tmp,cost=0; for(i=adj[x];~i&&cost<limit;i=e[i].pre) if(e[i].w&&dis[x]==dis[v=e[i].v]-1) { tmp=dfs(v,min(limit-cost,e[i].w)); if(tmp) { e[i].w-=tmp; e[i^1].w+=tmp; cost+=tmp; } else dis[v]=-1; } return cost;}int Dinic(){ int ans=0; while(bfs()) ans+=dfs(s,inf); return ans;}int main(){ while(~scanf("%d",&n)) { int i,j,ans=0; memset(d,0,sizeof(d)); memset(adj,-1,sizeof(adj)); num=0; for(i=1;i<=n;i++) scanf("%d",&a[i]); for(i=1;i<=n;i++) for(j=0;j<i;j++) if(a[i]>a[j]) { d[i]=max(d[i],d[j]+1); ans=max(ans,d[i]); } s=0; t=n+1; for(i=1;i<=n;i++) { if(d[i]==1) insert(s,i,1); if(d[i]==ans) insert(i,t,1); for(j=i+1;j<=n;j++) if(d[j]==d[i]+1&&a[i]<a[j]) insert(i,j,1); } printf("%d\n%d\n",ans,Dinic()); }}
- HDU3998 Sequence 动态规划+最大流2011 Multi-University Training Contest 16 - Host by TJU
- HDU3996 Gold Mine最大权闭合图 2011 Multi-University Training Contest 16 - Host by TJU
- 2009 Multi-University Training Contest 1 - Host by TJU
- Wireless Password [ 2009 Multi-University Training Contest 1 - Host by TJU ]
- 2011 Multi-University Training Contest 1 - Host by HNU
- 2011 Multi-University Training Contest 3 - Host by BIT
- HDU3879 Base Station 最大权闭合图/最大密度子图 2011 Multi-University Training Contest 5 - Host by BNU
- 2009 Multi-University Training Contest 5 - Host by NUDT
- 2009 Multi-University Training Contest 8 - Host by BJNU
- HDU3832 Earth Hour 2011 Multi-University Training Contest 1 - Host by HNU
- HDU 3829 Cat VS Dog 2011 Multi-University Training Contest 1 - Host by HNU
- HDU3836 Equivalent Sets 2011 Multi-University Training Contest 1 - Host by HNU
- HDU 3830 Checkers 2011 Multi-University Training Contest 1 - Host by HNU
- HDU HDU 3861 The King’s Problem 2011 Multi-University Training Contest 3 - Host by BIT
- HDU 3870 Catch the Theves 2011 Multi-University Training Contest 4 - Host by SDU
- HDU 3873 Invade the Mars 2011 Multi-University Training Contest 4 - Host by SDU
- HDU 3874 Necklace 2011 Multi-University Training Contest 4 - Host by SDU 树状数组+离散化
- HDU 3902 Swordsman 2011 Multi-University Training Contest 7 - Host by ECNU 计算几何
- 利用二叉树彻底弄懂[汉诺塔]递归原理
- Apache Solr:基于Lucene的可扩展集群搜索服务器
- Android 获取Root权限 详细图解
- 第三天
- 第四天
- HDU3998 Sequence 动态规划+最大流2011 Multi-University Training Contest 16 - Host by TJU
- 在Hibernate中使用HibernateTemplate来进行包含sql语句的查询
- 一个跨平台的 C++ 内存泄漏检测器
- D3DXMatrixTranslation D3D中的平移函数
- php中有关缓冲内置函数
- 自动化测试-使用使用数据库存储测试用例和测试结果
- fflush(stdin)和fflush(stdout)
- 明晰C++内存分配的五种方法的区别
- C++ Primer Plus学习:第七章 函数-C++的编程模块(3)