当前位置: 首页 > news >正文

最少逆序对数量+dp

前言:我一直感觉这题不符合最优子结构性,但是细想一下,我们的子结构就是当前我们处理到 i 的时候,是建立在 i - 1 的时候ans是最小的

这一题还用到了前缀和的思路来处理前面比自己大 以及 后面比自己小的数量


题目地址

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;#define int long long
const int N = (int)1e5+10;
int dp[2][N];
int a[N];
int n,k;// 考虑用
signed main(){cin >> n >> k;for(int i=1;i<=n;i++){cin>> a[i];if(a[i]!=-1) dp[1][a[i]]++; // 计算每个数的数量}for(int i=2;i<=k;i++){dp[1][i] += dp[1][i-1];  // 前缀和统计数量}int ans = 0;for(int i=1;i<=n;i++){if(a[i]==-1){// 开始枚举每一种可能int mx = 0x3f3f3f3f,pos;for(int j=1;j<=k;j++){if(dp[1][j-1] + dp[0][j+1] < mx){mx = dp[1][j-1] + dp[0][j+1];pos = j;}}a[i] = pos; // 最优填空}else{for(int j=a[i];j<=k;j++) dp[1][j]--; // 数量减一}// 开始对这个数进行处理for(int j=1;j<=a[i];j++) dp[0][j]++;ans += dp[0][a[i]+1];}cout << ans;system("pause");return 0;
}

http://www.mrgr.cn/news/28069.html

相关文章:

  • JAVA接入WebScoket行情接口
  • 设计模式学习
  • 基于Ubuntu2410脚本搭建OpenStack-D版
  • R语言贝叶斯分析:INLA 、MCMC混合模型、生存分析肿瘤临床试验、间歇泉喷发时间数据应用|附数据代码...
  • 机器学习day2-特征工程
  • skywalking各项指标说明
  • 鸿蒙 ArkUI组件二
  • Linux:进程状态和优先级
  • 基于51单片机的220V交流数字电流表proteus仿真
  • 差分进化算法(DE算法)求解实例---旅行商问题 (TSP)
  • 电脑硬盘被BitLocker,忘记秘钥
  • 仿先卜php阴盘奇门排盘的算法简述以及php的代码实现开源支持二开
  • Python进阶————迭代器与生成器
  • 《浔川社团官方联合会入驻 CSDN 公告》
  • java定时任务
  • 共享内存的理解
  • GDB调试
  • 【JAVA】
  • Linux驱动编程 - platform平台设备驱动总线
  • Linux:vim编辑技巧
  • 优思学院|质量工程师在APQP中具体做哪些工作?
  • Linux基础开发环境(git的使用)
  • PCIe进阶之TL:Completion Rules TLP Prefix Rules
  • 【计算机毕设-大数据方向】基于Hadoop的在线教育平台数据分析可视化系统的设计与实现
  • 微服务实战系列之玩转Docker(十五)
  • 代码随想录训练营第34天|dp前置转移