«問題描述:
給定正整數序列x1,...,xn 。
(1)計算其最長不下降子串行的長度s。
(2)計算從給定的序列中最多可取出多少個長度為s的不下降子串行。
(3)如果允許在取出的序列中多次使用x1和xn,則從給定序列中最多可取出多少個長度為s的不下降子串行。
«程式設計任務:
設計有效演算法完成(1)(2)(3)提出的計算任務。
輸入格式:
第1 行有1個正整數n,表示給定序列的長度。接下來的1 行有n個正整數n:x1, ..., xn。
輸出格式:
第1 行是最長不下降子串行的長度s。第2行是可取出的長度為s 的不下降子串行個數。第3行是允許在取出的序列中多次使用x1和xn時可取出的長度為s 的不下降子串行個數。
輸入樣例#1:
43 6 2 5
輸出樣例#1:
223
n≤500
solution:
本題簡單dp+最大流。
第一問直接煞筆dp。
第二問求最多取出多少個長度為$x=max(f[i])$的子串行,因為每個數要麼不選要麼只選1次,這樣有上下界的題目,考慮拆點跑最大流咯,將每個數拆成$i\rightarrow i'$連流量為1,若$f[i]==1$則$s\rightarrow i$連流量為1,若$f[i]==x$則$i'\rightarrow t$連流量為1,若$f[i]==f[j]+1,j
第三問可以重複用$a_1$和$a_n$,那麼改變的就是與這兩點直接相關的邊的流量了,我們在第二問的答案基礎上,加入新邊,$1\rightarrow 1'$流量inf,$n\rightarrow n'$流量inf,$s\rightarrow 1$流量inf,若$f[n]==x$則$n'\rightarrow t$流量inf,再跑下最大流就好了。
(實際上本題第三問有bug,比如最長不下降子串行長度為1,那麼第三問答案就應該是inf了,inf不確定,於是乎出鍋咯!反正實踐證明沒這資料,嘿嘿嘿!>.@_@.<)
**:
/*code by 520 -- 9.1
*/#include
#define il inline
#define ll long long
#define re register
#define for(i,a,b) for(re int (i)=(a);(i)<=(b);(i)++)
#define bor(i,a,b) for(re int (i)=(b);(i)>=(a);(i)--)
using
namespace
std;
const
int n=1050,m=2500005,inf=0x7fffffff
;int n,a[n],f[n],s,t=1001
;int h[n],dis[n],to[m],net[m],w[m],cnt=1
;int
ans1,ans2;
il void add(int u,int v,int
c)il
bool
bfs()
return dis[t+1]!=-1;}
int dfs(int u,int
op) }
if(!flow) dis[u]=-1
;
return
flow;
}il
void
init()
add(t,t+1
,inf);
for(i,
1,n) for(j,1,i-1) if(f[i]==f[j]+1&&a[i]>=a[j]) add(i+n,j,1
);
while(bfs()) ans2+=dfs(s,inf);
printf(
"%d\n
",ans2);
add(n+1,t,inf),add(1,n+1,inf),add(n,n<<1
,inf);
if(f[n]==ans1) add(s,n,inf);
while(bfs()) ans2+=dfs(s,inf);
printf(
"%d\n
",ans2);
}int
main()
P2766 最長不下降子串行問題
話不多說,直接上思路。其實這就是一道dp動態規劃的經典問題,首先鏈上題目描述 問題描述 設有整數序列b1,b2,b3,bm,若存在 i1 i2 i3 in,且 bi1 bi2 bi3 bin,則稱b1,b2,b3,bm中有長度為n的不下降序列bi1,bi2,bi3,bin。求序列中最大不下降子串行長...
P2766 最長不下降子串行問題
通俗的,對於每個數只能取一次和取無限次,將點拆開加入邊約束 因為讓求最長上公升子串行的個數,所以當乙個數字被選擇時,它必須是最長上公升子串行的一部分 我們求出最長上公升子串行的 dp 陣列,當 x 可以連邊 y 當且僅當 y 在 dp 中可以從 x 轉移過來 這樣問題就顯然了,我們只需要求解 dag...
24題 P2766最長不下降子串行問題
網路流是個好東西,希望我也會。網路流?orz zsy 考慮我們是如何 dp 這個 lis 的。我們是倒著推,設定 dp i 代表以 i 為起點的 lis 是多少。轉移太顯然了 dp i max 1,data i le data j 想一想乙個合法的 lis 方案代表著什麼,代表著它是由這個式子乙個乙...