• BZOJ1037 DP


    2013-11-15 21:51

    原题传送门http://www.lydsy.com/JudgeOnline/problem.php?id=1037

    拿到这道题想到了DP,后来发现三维无法确定的表示状态(起码我是表示不出来)

    然后就用四维表示状态,w[i,j,k1,k2]表示一共i个人,j个男生,前i-1个人中任意一个人到第i个人的区间里,男生比女生最多多k1个人且存在k1的情况,

    女生比男生最多多k2个人且存在k2的情况

    那么w[i,j,k1,k2]这个状态可以更新w[i+1,j+1,k1+1,max(k2-1,0)]表示第i+1个位置放的男生,w[i+1,j,max(k1-1),k2+1]表示放的女生,那么就可以转移了。

    //By BLADEVIL
    const 
    d39     =12345678;
    
    var
        n, m, k     :longint;
        i, j, k1, k2     :longint;
        w     :array[0..310,0..160,0..20,0..20] of longint;
        ans     :longint;
    function max(a,b:longint):longint;
    begin
        if a>b then max:=a else max:=b;
    end;
    begin
        read(n,m,k);
        w[1,1,1,0]:=1;
        w[1,0,0,1]:=1;
        for i:=1 to n+m-1 do 
            for j:=0 to i do 
                for k1:=0 to k do 
                    for k2:=0 to k do 
                    begin
                             if w[i,j,k1,k2]=0 then continue;
                             if (k1<k) and (j<n) then 
                                     w[i+1,j+1,k1+1,max(k2-1,0)]:=(w[i+1,j+1,k1+1,max(k2-1,0)]+w[i,j,k1,k2]) mod d39;
                             if (k2<k) and (i-j<m) then 
                                 w[i+1,j,max(k1-1,0),k2+1]:=(w[i+1,j,max(k1-1,0),k2+1]+w[i,j,k1,k2]) mod d39;
                    end;
        ans:=0;
        for i:=0 to k do 
            for j:=0 to k do ans:=(ans+w[n+m,n,i,j]) mod d39;
        writeln(ans);
    end.
  • 相关阅读:
    交叉排序
    交叉排序
    数据结构实验之串三:KMP应用
    数据结构实验之串三:KMP应用
    数据结构实验之串一:KMP简单应用
    数据结构实验之串一:KMP简单应用
    走迷宫
    走迷宫
    走迷宫
    走迷宫
  • 原文地址:https://www.cnblogs.com/BLADEVIL/p/3433527.html
Copyright © 2020-2023  润新知