CodeForces-1332 D. Caminhada na matriz

CodeForces - 1332 D. Caminhada na Matriz

Endereço do título:

http://codeforces.com/contest/1332/problem/D

Questões básicas:

Insira a descrição da imagem aqui
Dada a idéia de programação dinâmica acima, construa uma matriz de modo que o verdadeiro & máximo do caminho seja diferente do máximo & do caminho calculado pelo algoritmo acima por k.
Insira a descrição da imagem aqui
Idéias básicas:

Eu imploro para você não criar mais estruturas, eu não as faço, as pessoas são estúpidas;

Vamos primeiro analisar o processo de programação dinâmica acima.A idéia básica desse processo é usar o maior valor de ampere adjacente como o valor de ampere da posição atual, mas esse método é ideal? Obviamente que não, porque o maior valor pode ser menor que o resultado de um valor menor e outros valores quando comparado com outros valores ;
portanto, a ideia de nossa construção é que queremos fazer com que pareça mais O grande valor e a treliça final &, no entanto, o resultado de & é 0, mas se o menor na grade anterior for menor que a treliça final & o resultado for k;
então, como deve ser construído? Se você tem uma ideia de construção, tente construí-la.Não há como ver diretamente meu método de construção:
primeiro definimos dois valores máximos (1 << 18) -1 e (1 << 17), então nós Construa uma matriz da seguinte maneira;

1<<18- 1           k             0
 (1 << 17)1<<18- 1        k

Para impedir que todos vejam claramente, substituímos os números na matriz acima por binários;

11111111111111111               k                0
10000000000000000       11111111111111111        k

Escreva para que possamos quase ver que na posição (2, 2), de acordo com o algoritmo de programação dinâmica fornecido, o valor que devemos pegar é, 10000000000000000no entanto, o resultado desse valor e k & deve ser zero (veja a faixa de valores de k acima ), Mas, de fato, se considerarmos k em (2, 2), o resultado final deverá ser k.Nós descobrimos que esse k é o verdadeiro & path maximum, portanto a diferença é k.

Código de referência:

#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include <bits/stdc++.h>
using namespace std;
#define IO std::ios::sync_with_stdio(false)
#define int long long
#define rep(i, l, r) for (int i = l; i <= r; i++)
#define per(i, l, r) for (int i = l; i >= r; i--)
#define mset(s, _) memset(s, _, sizeof(s))
#define pb push_back
#define pii pair <int, int>
#define mp(a, b) make_pair(a, b)
#define INF 0x3f3f3f3f
inline int read() {
  int x = 0, neg = 1; char op = getchar();
  while (!isdigit(op)) { if (op == '-') neg = -1; op = getchar(); }
  while (isdigit(op)) { x = 10 * x + op - '0'; op = getchar(); }
  return neg * x;
}
inline void print(int x) {
  if (x < 0) { putchar('-'); x = -x; }
  if (x >= 10) print(x / 10);
  putchar(x % 10 + '0');
}
signed main() {
  IO;
  int k;
  cin >> k;
  int t = (1 << 18) - 1;
  int z = (1 << 17);
  cout << 2 << " " << 3 << "\n";
  cout << t << " " << k << " " << 0 << "\n";
  cout << z << " " << t << " " << k << "\n";
  return 0;
}
Publicado 23 artigos originais · elogiou 7 · visitas 1737

Acho que você gosta

Origin blog.csdn.net/weixin_44164153/article/details/105243404
Recomendado
Clasificación