description
給定正整數序列x1 , ... , xn 。
(1)計算其最長遞增子串行的長度s。
(2)計算從給定的序列中最多可取出多少個長度為s的遞增子串行。
(3)如果允許在取出的序列中多次使用x1和xn,則從給定序列中最多可取出多少個長度為s的遞增子串行。
設計有效演算法完成(1)(2)(3)提出的計算任務。
input
多組資料輸入.
每組輸入第1 行有1個正整數n,表示給定序列的長度。接下來的1 行有n個正整數x1 ,... , xn。
output
每組輸出第1 行是最長遞增子串行的長度s。第2行是可取出的長度為s 的遞增子串行個數。第3行是允許在取出
的序列中多次使用x1和xn時可取出的長度為s 的遞增子串行個數。
sample input
43 6 2 5
sample output22
3題目出自nefu487
思路:第一問好求,直接dp就ok,然後第二三問就得用網路流的知識解決了。網上各種題解都說要拆點,我寫完了之後看了看覺得其實並沒有意義,拆點是自己本身這個點有權值的時候才需要去拆點,這一題主要是看子串行的建邊,與每個點自身的dp數值並木有關係,所以這題的建邊並不需要拆點,第二問就是從源點連邊到dp值為1的點,從dp值最大的點連邊到匯點,然後滿足dp相互關係的點之間連邊就ok,然後跑最大流就得到第二問結果。至於第三問,只是在第二問的基礎上把第乙個點如果和起點存在邊,將權值設為oo,最後乙個點如果和終點存在邊,將權值設為oo就好,其他無大改變,當然,如果第三問跑的最大流是無窮大了,這只有一種可能,就是所有的點的輸入權值都相等了,使得每個點都和源點和匯點連邊的權值成為了無窮大,所以答案自然就錯了,所以這時候應當把答案輸出成第二問計算出來的答案。
經過我的驗證的確不需要拆點 ╮(╯—╰)╭……
#include #include #include #include#include#include#include#includeusing namespace std;
typedef long long ll;
const int oo=1e9;/**oo 表示無窮大*/
const int mm=111111111;/**mm 表示邊的最大數量,記住要是原圖的兩倍,在加邊的時候都是雙向的*/
const int mn=2010;/**mn 表示點的最大數量*/
int node,src,dest,edge;/**node 表示節點數,src 表示源點,dest 表示匯點,edge 統計邊數*/
int ver[mm],flow[mm],nex[mm];
int head[mn],work[mn],dis[mn],q[mn];
void prepare(int _node, int _src,int _dest)
void addedge( int u, int v, int c)
bool dinic_bfs()
return 0;
}int dinic_dfs( int u, int exp)
return 0;
}int dinic_flow()
int ans1=dinic_flow();
printf("%d\n",ans1);
prepare(n+2,0,n+1);///第三問建圖
for (int i=1; i<=n; i++)
else
for(int j=1; ja[j])
addedge(j,i,1);
}int ans2=dinic_flow();
if(ans2>=oo)///只有在所有資料都相等的情況下才會出現這種情況
printf("%d\n",ans1);
else
printf("%d\n",ans2);
}return 0;
}
最長遞增子串行問題
給定乙個長度為n的陣列,找出乙個最長的單調自增子序列 不一定連續,但是順序不能亂 例如 給定乙個長度為6的陣列a,則其最長的單調遞增子串行為,長度為4.include define maxn 100 假設最多有100個元素 using namespace std int l maxn l i 表示元...
最長遞增子串行問題
給定正整數序列x1,xn。1 計算其最長遞增子串行的長度s。2 計算從給定的序列中最多可取出多少個長度為s的遞增子串行。3 如果允許在取出的序列中多次使用x1和 xn,則從給定序列中最多可取出多少個長度為s的遞增子串行。設計有效演算法完成 1 2 3 提出的計算任務。由檔案input.txt提供輸入...
最長遞增子串行問題
某國為了防禦敵國的飛彈襲擊,發展出一種飛彈攔截系統。但是這種飛彈攔截系統有乙個缺陷 雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能高於前一發的高度。某天,雷達捕捉到敵國的飛彈來襲。由於該系統還在試用階段,所以只有一套系統,因此有可能不能攔截所有的飛彈。輸入資料為飛彈依次飛來的高度,所...