Informações sobre o Luogu P1006 Orsay One Pass 1853

Link do título:
Luogu https://www.luogu.com.cn/problem/P1006

Olimpíada de Informações http://ybt.ssoier.cn:8088/problem_show.php?pid=1853

 

Este é um problema de planejamento dinâmico.

Pode-se considerar que duas passagens foram feitas ao mesmo tempo.Deixe que [i] [j] indique que k foram executadas, o primeiro item foi para a i-ésima linha e o segundo item foi para o valor máximo da j-ésima coluna.

Você pode usar o princípio de 01 mochila para empurrar o espaço para fora de uma dimensão, para que apenas uma matriz bidimensional seja usada e a complexidade do tempo seja O ((m + n) * mn).

Código:

#include <stdio.h>
 int a [ 101 ] [ 101 ], s [ 101 ] [ 101 ], m, n, a1;
int main () { 
    scanf ( " % d% d " , & m, & n);
    for ( int i = 1 ; i <= m; i ++) for ( int j = 1 ; j <= n; j ++) scanf ( " % d " , & s [i] [j]); 
    a [ 1 ] [ 1 ] = s [ 1 ] [ 1 ];
    para ( int k = 2; k <= m + n; k ++) para ( int i = k- 1 ; i> = 1 ; i--) para ( int j = k- 1 ; j> = i; j-- ) { 
        a1 = a [eu j];
        if (a [i- 1 ] [j- 1 ]> a1) a1 = a [i- 1 ] [j- 1 ];
        if (a [i] [j- 1 ]> a1) a1 = a [i] [j- 1 ];
        if (a [i- 1 ] [j]> a1) a1 = a [i- 1 ] [j]; 
        a [i] [j] = a1 + s [i] [ki] + s [j] [kj] * (i! = j); 
    } 
    printf (" % d " , a [m- 1 ] [m]);
    retornar  0 ; 
}

Posso não escrever bem, se houver um problema, por favor, ajude a salientar, obrigado.

Acho que você gosta

Origin www.cnblogs.com/sy666/p/12722707.html
Recomendado
Clasificación