第二问好迷。。。

  1. #include "Head.cpp"
  2. #include <vector>
  3. const int N = 35007;
  4. vector<int> V[N];
  5. int a[N], b[N], f[N];
  6. int sum1[N], sum2[N], dp[N];
  7. int main(){
  8. int n;
  9. io >> n;
  10. R(i,1,n){
  11. io >> a[i];
  12. a[i] -= i;
  13. }
  14. a[++n] = 0x3f3f3f3f;
  15. int len = 1;
  16. b[len] = a[1];
  17. f[1] = 1;
  18. R(i,2,n){
  19. if(a[i] >= b[len]){
  20. b[++len] = a[i];
  21. f[i] = len;
  22. }
  23. else{
  24. int pos = upper_bound(b + 1, b + len + 1, a[i]) - b;
  25. b[pos] = a[i];
  26. f[i] = pos;
  27. }
  28. }
  29. printf("%d\n", n - f[n]);
  30. a[0] = -0x3f3f3f3f;
  31. V[0].push_back(0);
  32. R(i,1,n){
  33. dp[i] = 0x3f3f3f3f;
  34. for(vector<int>::iterator j = V[f[i] - 1].begin(); j != V[f[i] - 1].end(); ++j){
  35. if(a[*j] > a[i]) continue;
  36. sum1[*j - 1] = sum2[*j - 1] = 0;
  37. R(k,*j,i){
  38. sum1[k] = sum1[k - 1] + Abs(a[i] - a[k]);
  39. sum2[k] = sum2[k - 1] + Abs(a[*j] - a[k]);
  40. }
  41. R(k,*j,i){
  42. dp[i] = Min(dp[i], dp[*j] - sum2[*j] - sum1[k] + sum2[k] + sum1[i]);
  43. }
  44. }
  45. V[f[i]].push_back(i);
  46. }
  47. printf("%d\n", dp[n]);
  48. return 0;
  49. }

P2501 [HAOI2006]数字序列 (LIS,DP)(未完成)的更多相关文章

  1. 2021.12.06 P2501 [HAOI2006]数字序列(动态规划+LIS)

    2021.12.06 P2501 [HAOI2006]数字序列(动态规划+LIS) https://www.luogu.com.cn/problem/P2501 题意: 现在我们有一个长度为 n 的整 ...

  2. 洛谷 P2501 [HAOI2006]数字序列 解题报告

    P2501 [HAOI2006]数字序列 题目描述 现在我们有一个长度为n的整数序列A.但是它太不好看了,于是我们希望把它变成一个单调严格上升的序列.但是不希望改变过多的数,也不希望改变的幅度太大. ...

  3. Luogu P2501 [HAOI2006]数字序列

    题目 首先把\(a\)改成严格单调上升等于把\(a_i-i\)改成单调不降. 那么第一问可以直接做LIS,答案就是\(n-\)LIS的长度. 同时我们记录一下序列中每个位置结尾的LIS长度. 第二问我 ...

  4. p2501 [HAOI2006]数字序列

    传送门 分析 https://www.luogu.org/blog/FlierKing/solution-p2501 对于第二问的感性理解就是有上下两条线,一些点在上面的线的上面或者下面的线的下面,然 ...

  5. bzoj 1049: [HAOI2006]数字序列【dp+二分+瞎搞】

    第一问明显就是用b[i]=a[i]-i来做最长不下降子序列 然后第二问,对于一对f[i]=f[j]+1的(i,j),中间的数一定要改的,并且是等于b[i]或者b[j],我不会证,然后因为是随机数据,所 ...

  6. 【BZOJ 1049】 1049: [HAOI2006]数字序列 (LIS+动态规划)

    1049: [HAOI2006]数字序列 Description 现在我们有一个长度为n的整数序列A.但是它太不好看了,于是我们希望把它变成一个单调严格上升的序列.但是不希望改变过多的数,也不希望改变 ...

  7. 【BZOJ1049】 [HAOI2006]数字序列

    BZOJ1049 [HAOI2006]数字序列 dp好题? 第一问 第一问我会做!令\(b_i=a_i-i\),求一个最长不下降子序列. \(n-ans\)就是最终的答案. 第二问 好难啊.不会.挖坑 ...

  8. bzoj 1049 [HAOI2006]数字序列

    [bzoj1049][HAOI2006]数字序列 Description 现在我们有一个长度为n的整数序列A.但是它太不好看了,于是我们希望把它变成一个单调严格上升的序列.但是不希望改变过多的数,也不 ...

  9. 【BZOJ1049】【Luogu P2501】 [HAOI2006]数字序列 DP,结论,LIS

    很有(\(bu\))质(\(hui\))量(\(xie\))的一个题目. 第一问:求最少改变几个数能把一个随机序列变成单调上升序列. \(Solution:\)似乎是一个结论?如果两个数\(A_i\) ...

随机推荐

  1. Hadoop配置与安装

    基础配置 1.关闭防火墙 systemctl stop firewalld.service #停止firewall systemctl disable firewalld.service #禁止fir ...

  2. 目标检测复习之YOLO系列

    目标检测之YOLO系列 YOLOV1: blogs1: YOLOv1算法理解 blogs2: <机器爱学习>YOLO v1深入理解 网络结构 激活函数(leaky rectified li ...

  3. AcWing 4378. 选取数对

    y总分析:这种题(我也不知道说的是哪种题hh)一般解法为贪心或dp,而本题用的是dp. 其实个人感觉题目不是很严谨,从y总讲解和题解分析得知各个数对区间是不能重叠的,但是题目使用的是≤,感觉数对的区间 ...

  4. 二进制固件函数劫持术-DYNAMIC

    背景介绍  固件系统中的二进制文件依赖于特定的系统环境执行,针对固件的研究在没有足够的资金的支持下需要通过固件的模拟来执行二进制文件程序.依赖于特定硬件环境的固件无法完整模拟,需要hook掉其中依赖于 ...

  5. vs2022+resharper创建模板——实现在新建文件的时候自动生成防卫式声明和自定义语句

    在网上找了很久如何让visual studio新建文件的时候自动生成注释和防卫式声明,虽然防卫式声明可以用#proga once替代,但是在clion里可以自动生成vs里面没法自动生成还是觉得难受,于 ...

  6. 常用排序算法(一)-java实现

    排序算法总结 1.十大经典算法及性能 2.具体排序算法 1.冒泡排序 循环过程中比较相邻两个数大小,通过交换正确排位,循环整个数组即可完成排序 图片演示 代码实现Java //冒泡排序 public ...

  7. Xilinx DMA的几种方式与架构

    DMA是direct memory access,在FPGA系统中,常用的几种DMA需求: 1. 在PL内部无PS(CPU这里统一称为PS)持续干预搬移数据,常见的接口形态为AXIS与AXI,AXI与 ...

  8. SAP Web Dynpro-调试应用程序

    您可以使用ABAP工作台中的各种工具来调试源代码. 您可以使用调试器测试Web Dynpro应用程序的所有源代码. 步骤1-要启动调试器,您必须在ABAP工作台中选择一个新的调试器. 步骤2-转到实用 ...

  9. vim插件的社区活跃度怎么样

    www.vim.org -> Scripts -> Browse all可以看到有5051个插件.搜索Nerd可以看到NerdTree插件,它的评分是Rating 7882/2514, D ...

  10. MyBatis 映射文件

    Mybatis映射文件简介 1) MyBatis 的真正强大在于它的映射语句.由于它的异常强大,映射器的 XML 文件就显得相对简单.如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉 ...