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;
}