摘要: 题解: 这东西就是分层DP 考虑dp ( i , j )表示到位置( i , j )的最短长度 然后可以枚举上一次的位置转移过来 这样单次转移复杂度和两层中点的数量有关 这样复杂度显然是O((nm)^2)的,爆炸 考虑另一种暴力,每次转移时bfs,这样单次转移复杂度O(nm) 考虑根号分治,当两层点 阅读全文
posted @ 2019-03-17 20:11 幽蝶 阅读(306) 评论(0) 推荐(0) 编辑
摘要: 题解: 这题难度是怎么被评为2300的。。。 暴力 枚举左分界点,然后map统计右分界点 1 #include<bits/stdc++.h> 2 #define maxn 100005 3 #define ll long long 4 using namespace std; 5 int n; 6 阅读全文
posted @ 2019-03-17 16:25 幽蝶 阅读(130) 评论(0) 推荐(0) 编辑
摘要: 题解: 我们考虑题目条件,相当于n个一段,连续k段中满足条件的子序列个数 枚举起始段是哪段,然后把n*k个数存下来,很容易DP 这个DP是dp[i]=∑(dp[j]) a[j]<=a[i],j在i的前一段 复杂度的话每段丢进树状数组,然后结束再删掉就好了 前面的重复段算一下有多少个,然后乘一下就好 阅读全文
posted @ 2019-03-17 15:54 幽蝶 阅读(162) 评论(0) 推荐(0) 编辑