網路流24題之T6 最長遞增子串行問題

2021-07-29 19:27:27 字數 1089 閱讀 8311

本題的資料有問題,所以題面應該改為最長不下降子串行就可以了。

#include 

#include

#include

#include

#include

#include

using namespace std ;

const int maxn=1010;

const int oo=1000000000;

typedef struct edge

edge (int a,int b,int d,int e,int g)

}e;e edge[100

*maxn+10];

int len=-1,head[maxn],n;

int vis[maxn],dis[maxn];

int cur[maxn];

inttimes=1;//避免每次都memset,減少時間複雜度

int allp;//總的點個數

int s,t;//源點和匯點的編號

int a[1010],f[1010],k=0;

void e_add (int

s,int t,int

x,int

y)void init ()

}int bfs ()}}

return vis[t]==times;

}int dfs (int

x,int fmax)

}return flow;

}int dinic ()

return flow;

}void make_map ()

if (f[i]==k)

for (j=i+1;j<=n;j++)}}

}void change_map ()

if (edge[i].u==n*2&&edge[i].v==n*2+1)

if (edge[i].u==1&&edge[i].v==2)

if (edge[i].u==n*2+1&&edge[i].v==t)

}}int main ()

k=max (k,f[i]);

}cout 0;}

網路流24題6 最長遞增子串行

給定正整數序列x1,xn 1 計算其最長遞增子串行的長度s。2 計算從給定的序列中最多可取出多少個長度為s的遞增子串行。3 如果允許在取出的序列中多次使用x1和xn,則從給定序列中最多可取出多少個長度為s的遞增子串行。設計有效演算法完成 1 2 3 提出的計算任務。第一問秒掉 第二問比較難想到,每個...

網路流 24 題 最長遞增子串行

1 dp求一遍 2 所有點拆成入點和出點,對於沒個f i 1的1點連源點,每個f i ans1的點連匯點,每個點的入點和出點再連一條邊,所有容量為1,求一遍最大流。2 1和n可以用多次,所以對於點1和點n,入點和出的連邊的容量變為inf,如果需要連源點或匯點那麼容量也變為n,其餘容量為1,求一遍最大...

網路流24題 最長遞增子串行

輸入檔案 alis.in輸出檔案 alis.out簡單對比 時間限制 1 s 記憶體限制 128 mb 問題描述 給定正整數序列x1,xn。1 計算其最長遞增子串行的長度s。2 計算從給定的序列中最多可取出多少個長度為s的遞增子串行。3 如果允許在取出的序列中多次使用x1和xn,則從給定序列中最多可...