0%

思路讲解

给定 r 和 s,任何长度至少为(r − 1)(s − 1) + 1 的互异实数序列都包含长度为 r 的单调递增子序列或长度为 s 的单调递减子序列。

L=(r1)(s1)+1=22+1=5L=(r-1)*(s-1)+1 =2*2+1=5

我们来分解一下这个定义:

  • 子序列 (Subsequence):从原序列中,按照原来的顺序,拿掉零个或多个元素后,剩下的元素组成的序列。例如,在序列 {3, 1, 4, 5, 2} 中,{1, 4, 2} 就是一个子序列。

  • 单调递增 (Monotonically Increasing):序列中的每个数都比它前面的数要大。例如 {2, 5, 8, 10}。

  • 单调递减 (Monotonically Decreasing):序列中的每个数都比它前面的数要小。例如 {9, 6, 3, 1}。

所以,这个定理告诉你,只要你的序列足够长,你就一定能从中找到一个特定长度的、要么是持续上升、要么是持续下降的子序列。

AC代码

https://ac.nowcoder.com/acm/contest/view-submission?submissionId=78240193

心路历程(WA,TLE,MLE……)

思路讲解

那么,我们发现这道题目的难点在于怎么让这个不平衡度单调下降的同时,让这个切割代价最小。

那么,我个人认为,这个不平衡度的单调下降不难,因为这个是只和前一个状态有关系,转移的时候校验一下就行。

现在的难点就是在于这个状态定义

然后我看了一下,其实我想的没什么太大问题,就是把这个第几次砍给干掉就行。状态定义就是 dp[l][r]dp[l][r]

不难发现,其会形成类似于区间树的样子。

然后难点就来到了状态转移

如果不用考虑不平衡度的单调下降,那么这个状态转移就简单了,就是 P1880 [NOI1995] 石子合并 。但是显然没有说那么简单。

1
2
3
// 如果我们解决不了到底谁更优,是较大的imbalance,还是较小的代价
// 那么我们可以都存下来
V<V<V<pll>>> dp(N+5,V<V<pll>>(N+5));

AC代码

心路历程(WA,TLE,MLE……)

思路讲解

非常暴力的模拟,唯一记忆的地方就在于这个划线。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
FOR(i,1,N){
if(ans[i][1]!=0){
cout<<ans[i][1]<<"\n";
continue;
}
ll cur=i,id=1;
vector<arr2> wp;
while(true){
wp.pb({cur,id});
ll v=g[cur][id];
FOR(i,1,num[v]){
if(g[v][i]==cur){
id=i;
}
}
if(id+1<=num[v]){
id+=1;
}else{
id=1;
}
if(ans[v][id]){
ll lans=ans[v][id]+SZ(st);
if(ans[v][id]==-1) lans=SZ(st);
for(auto &[x,idx]:wp){
ans[x][idx]=lans;
}
break;
}
ans[v][id]=-1;
arr2 t={cur,v};sort(all(t));
st.insert(t);
cur=v;
}
cout<<ans[i][1]<<"\n";
st.clear();
}

AC代码

https://ac.nowcoder.com/acm/contest/view-submission?submissionId=78205559

心路历程(WA,TLE,MLE……)

思路讲解

这个的状态定义比较巧妙,定义的是a1和aN/2的差,a1+a2与aN/2+1+aN/2+2的差

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
FOR(i,1,N/2){
FOR(d,-(N-1),N-1){
FOR(j,0,N/2*N/2){
if(j+d<0) continue;
if(d<=0){
dp[i][j]+=dp[i-1][j+d]*ct_[i][abs(d)];
dp[i][j]%=mod;
}else{
dp[i][j]+=dp[i-1][j+d]*ct[i][d];
dp[i][j]%=mod;
}

}
}
}

AC代码

https://www.codechef.com/viewsolution/1172894021

心路历程(WA,TLE,MLE……)

思路讲解

AC代码

心路历程(WA,TLE,MLE……)