Bit computação + pensamento Codeforces Rodada # 630 (Div. 2) D título Walk on Matrix

Caminhada na Matrix

Assunto no sentido de que:

Para lhe dar um número inteiro k positivo, permitem que você crie um n * m bordo, cada placa tem um valor de ponto, você acabou de começar em (1,1) ponto, o seu objectivo é vir (n, m) ponto, e obter um valor de prioridade máxima, a fórmula de cálculo do valor do peso como dp [i] [j] = max (dp [I-1] [j] & a [i] [j], dp [i] [j-1] e um [i] [j]);

Dp claro que isso se aplica apenas à operação convencional, operação bit não é aplicável;

Então, você tem direito a k, permitem que você crie tabuleiro, de modo que o valor máximo da operação dp, com a diferença entre o valor máximo real de k;


Outros olharam para o código e descobriu que apenas 3 linhas;

Pensando neste problema é construir dp fora valor é 0, o valor real do k, esta comparação realmente querem, a idéia básica da estrutura;

Mas como a construção é mais difícil, e não há nenhuma boa explicação;

Nos quatro fórmulas:

K & K = k, x e k = 0, (x + k) & k = K, (x + k) & x = x;

Diretamente no código:

#include<bits/stdc++.h>
#define LL long long
#define pa pair<int,int>
#define ls k<<1
#define rs k<<1|1
#define inf 0x3f3f3f3f
using namespace std;
const int N=510;
const int M=1010;
const LL mod=1e8-3;
int main(){
	int k;
	cin>>k;
	int x=(1<<17);
	cout<<2<<" "<<3<<endl;
	cout<<x+k<<" "<<x<<" "<<0<<endl;
	cout<<k<<" "<<x+k<<" "<<k<<endl; 
	return 0;
}

Publicado 264 artigos originais · ganhou elogios 46 · vê 10000 +

Acho que você gosta

Origin blog.csdn.net/qq_44291254/article/details/105247279
Recomendado
Clasificación