1786: [Ahoi2008]Pair 配对

Time Limit: 10 Sec  Memory Limit: 64 MB
Submit: 899  Solved: 591
[Submit][Status][Discuss]

Description

Input

Output

Sample Input

5 4
4 2 -1 -1 3

Sample Output

4

一个很好的结论是:

填入的数一定要不严格递增,因为如果填入的数中存在逆序对,那么交换这两个数一定会使答案更优

这样就可以dp了

步骤:

①预处理sum[i][x]为第i个数如果为x那么包含x的逆序对为sum[i][x]个

②dp[i][x]表示第i个数填上x最少有dp[i][x]个逆序对

上面两个数组都可以O(nk)处理出来所有情况

复杂度O(nk)

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int a[10005], s1[10005][105], s2[10005][105], dp[10005][105];
int main(void)
{int n, k, i, j, last, ans, now;scanf("%d%d", &n, &k);for(i=1;i<=n;i++)scanf("%d", &a[i]);for(i=1;i<=k;i++){for(j=1;j<=n;j++){s1[j][i] = s1[j-1][i];if(a[j]>i)s1[j][i] += 1;}for(j=n;j>=1;j--){s2[j][i] = s2[j+1][i];if(a[j]<i && a[j]!=-1)s2[j][i] += 1;}for(j=1;j<=n;j++)s1[j][i] += s2[j][i];}ans = last = 0;memset(dp, 62, sizeof(dp));for(i=1;i<=n;i++){if(a[i]!=-1){ans += s1[i][a[i]];continue;}now = 2e9;for(j=1;j<=k;j++){if(last==0)dp[i][j] = s1[i][j];else{now = min(now, dp[last][j]);dp[i][j] = now+s1[i][j];}}last = i;}now = 2e9;for(i=1;i<=k;i++)now = min(now, dp[last][i]);if(last==0)printf("%d\n", ans/2);elseprintf("%d\n", ans/2+now);return 0;
}
/*
5 4
4 2 -1 4 3
*/

bzoj 1786 bzoj 1831: [Ahoi2008]Pair 配对(DP)相关推荐

  1. bzoj 2654 bzoj 3675 总结

    bzoj 2654 && bzoj 3675 总结 手动博客搬家: 本文发表于20180929 15:18:55, 原地址https://blog.csdn.net/suncongbo ...

  2. C++ 和 Java 中的 Pair 配对

    C++ 和 Java 中的 Pair 配对 \qquad 配对(Pair).配对提供了一种方便方式来处理简单的键值关联,当我们想从方法返回两个值时特别有用. Java Pair类在javafx.uti ...

  3. BZOJ 1786 DP

    思路: 肯定从小往大填合适了 f[i][j]表示第i个数是j的最少逆序对数 f[i][j]=min(f[i-1][k]+cost,f[i][j]) 优化一下成O(nk)就好啦~ (不优化也可以过的-) ...

  4. BZOJ.3227.[SDOI2008]红黑树tree(树形DP 思路)

    BZOJ orz MilkyWay天天做sxt! 首先可以树形DP:\(f[i][j][0/1]\)表示\(i\)个点的子树中,黑高度为\(j\),根节点为红/黑节点的最小红节点数(最大同理). 转移 ...

  5. BZOJ 4042 Luogu P4757 [CERC2014]Parades (树形DP、状压DP)

    题目链接 (BZOJ) https://www.lydsy.com/JudgeOnline/problem.php?id=4042 (Luogu) https://www.luogu.org/prob ...

  6. BZOJ 4417 Luogu P3990 [SHOI2013]超级跳马 (DP、矩阵乘法)

    题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=4417 (luogu)https://www.luogu.org/prob ...

  7. BZOJ 3875 - SPFA处理带环的DP

    本题的DP思路很好想:设f[i]为第i个怪兽被消灭所需要的最小代价,那么, f[i]=min{spl[i],ori[i]+∑j∈App[i]f[j]} 然而,由于f[j]有可能也要依赖f[i],所以这 ...

  8. BZOJ 1233 干草堆 (单调队列优化DP)

    \(BZOJ~1233~~\)干草堆: (题目特殊性质) \(solution:\) 很妙的一道题目,开始看了一眼觉得是个傻逼贪心,从后往前当前层能多短就多短,尽量节省花费.但是这是DP专题,怎么会有 ...

  9. BZOJ 1009: [HNOI2008]GT考试(kmp+dp+矩阵优化)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1009 题意: 思路: 真的是好题啊! 对于这种题目,很有可能就是dp,$f[i][j]$表示分析到第 ...

最新文章

  1. 如何快速找出找出两个数组中的_找出JavaScript中两个数组之间的差异
  2. python动态显示进度条_实例详解python如何轻松实现动态进度条
  3. 同一个页面两个aside标签ID重复问题导致的功能缺失
  4. access开发精要(8)-设置行高、列宽、隐藏字段,取消隐藏字段,冻结列,取消冻结列,网格线
  5. Ubuntu 12.10 安装官方JDK
  6. 大叔公开课~微服务与持久集成
  7. Angular2 指令
  8. 数据流重导向 -- 第11章   认识与学习 BASH
  9. 微信语音遥控Windows Azure云虚拟机
  10. ProjectManagement::Redmine中文乱码问题
  11. 转载python操作wps V9 API,测试好用
  12. pdf文档怎么转换成word格式,pdf转word的方法
  13. java能写游戏脚本吗_java能写游戏脚本吗?
  14. java maven 配置环境变量_maven 环境变量的配置详解
  15. html设置长宽高代码_(HTML)图像的宽高和边框设置!
  16. 统计推断——假设检验——方差分析之多重比较(LSD法、Sidak法、Bonferroni法、Dunnett法、Tukey法、SNK 法、Duncan法)
  17. 搜索计算机找不到,win7找不到搜索框怎么办?win7找不到搜索框修复方法
  18. 【水果识别】柑橘质量检测及分级系统【含GUI Matlab源码 738期】
  19. [UE] 软件界面(未完成)
  20. 百度和谷歌:局域网战胜互联网

热门文章

  1. 开课吧学python靠谱吗-开课吧9.9元学Python课程适合哪些人?开课吧靠谱吗?
  2. python读音-原来Python应该这么念,怪不得总被嘲笑~
  3. python是什么软件-Python 是什么软件?
  4. 小白用python处理excel文件-Python3操作Excel文件(读写)的简单实例
  5. python零基础能学吗-零基础小白多久能学会python
  6. 语音识别技术是什么_语音识别技术应用领域介绍
  7. 用深度学习进行语音识别为什么还要算mfcc?
  8. python一只青蛙一次可以_40.细说递归之二:Python求解斐波那契数列
  9. 导入php项目_商业裂变,之项目技术实战(第九节:程序框架的安装)
  10. vue中使用scss