BZOJ-1786: [Ahoi2008]Pair 配对 &am

作者: AmadeusChan | 来源:发表于2019-02-28 14:27 被阅读0次

题目:

http://www.lydsy.com/JudgeOnline/problem.php?id=1786

http://www.lydsy.com/JudgeOnline/problem.php?id=1831

我们可以神奇的证明出填入的数是单调不递减的(证明详解灰天飞雁大神的神题解:http://www.cnblogs.com/htfy/archive/2012/12/11/2813497.html),于是乎我们就可以很愉快的DP出来了。

代码:

#include <cstdio>

#include <algorithm>

#include <cstring>

 

using namespace std ;

 

#define Rep( i , x ) for ( int i = 0 ; i < x ; ++ i )

#define rep( i , x ) for ( int i = 0 ; i ++ < x ; )

#define REP( i , l , r ) for ( int i = l ; i <= r ; ++ i )

 

const int maxn = 10010 , maxk = 110 , inf = 1000000000 ;

 

int dp[ maxn ][ maxk ] , pre[ maxn ][ maxk ] , a[ maxn ] , n , k , ans = 0 ;

 

int Count( int pos , int val ) {

    return ( pre[ pos ][ k ] - pre[ pos ][ val ] ) + ( pre[ n ][ val - 1 ] - pre[ pos ][ val - 1 ] ) ;

}

 

int main(  ) {

    memset( pre[ 0 ] , 0 , sizeof( pre[ 0 ] ) ) ;

    scanf( "%d%d" , &n , &k ) ;

    rep( i , n ) {

        scanf( "%d" , a + i ) ;

        REP( j , 0 , k ) pre[ i ][ j ] = pre[ i - 1 ][ j ] ;

        if ( a[ i ] != -1 ) ++ pre[ i ][ a[ i ] ] ;

    }

    rep( i , n ) rep( j , k ) pre[ i ][ j ] += pre[ i ][ j - 1 ] ;

    rep( i , n ) {

        if ( a[ i ] != -1 ) ans += ( pre[ i ][ k ] - pre[ i ][ a[ i ] ] ) ;

    }

    rep( i , k ) dp[ 0 ][ i ] = inf ;

    dp[ 0 ][ 1 ] = 0 ;

    int last = 0 , temp ;

    rep( i , n ) if ( a[ i ] == -1 ) {

        rep( j , k ) {

            temp = inf ;

            rep( h , j ) temp = min( temp , dp[ last ][ h ] ) ;

            dp[ i ][ j ] = min( inf , temp + Count( i , j ) ) ;

        }

        last = i ;

    }

    temp = inf ;

    rep( j , k ) temp = min( temp , dp[ last ][ j ] ) ;

    printf( "%d\n" , ans + temp ) ;

    return 0 ;

}

相关文章

  • BZOJ-1786: [Ahoi2008]Pair 配对 &am

    题目: http://www.lydsy.com/JudgeOnline/problem.php?id=1786 ...

  • BZOJ1786: [Ahoi2008]Pair 配对

    题意给定我们一个包含一些正整数的序列,其中的一些数字位置,用-1代替,求该序列最少的逆序对数 数据范围序列长度N<...

  • 配对(Pair)

    一、简述 当一个方法需要返回有重要意义的两个值时,一般会用 Map 的 key 和 value 来表达,但是这样的...

  • 配对Pair的使用

    前言 在Java中也有Pair的使用。但是我今天要讲的是Android中配对Pair的使用。记得之前写过关于Pai...

  • 测试用例优化-PICT

    配对测试(pair-wise testing) 什么是配对测试?配合测试是一种简单的组合不同的测试案例,达到最大覆...

  • Google Fast Pair

    Google Fast Pair正是利用了前面所说的LE配对认证后生成的LTK与经典蓝牙所需的link key可以...

  • nanomsg使用记录--java版

    1 PAIR 模式 Pair.java 2 PAIR 模式 Pair.java 3 REQREP模式 4 PUBS...

  • 2022-05-16

    Manhattan-based Au pair looking for an Au pair/ Mandarin ...

  • 中缀调用

    定义public infix fun A.to(that: B): Pair = Pair(this, th...

  • pair

    男女 阴阳 正负,均是成对的

网友评论

    本文标题:BZOJ-1786: [Ahoi2008]Pair 配对 &am

    本文链接:https://www.haomeiwen.com/subject/jrihuqtx.html