질문의 의미 :
매트릭스 구조이므로 실제 최대 비율의 오른쪽 하단 왼쪽 상단에서 표기 한 것으로 \ (DP \) 에있어서 큰 \ (K를 \) .
분석 :
되도록 \ (DP \) 의 최대 값이 결정된다 (\ 0 \) 실질적인 최대, \ (K \) .
행렬의 경우 :
타이틀에 따르면 (\ DP) \ 접근
\ (A_가 최대} = {2,2 \ A_ {1,1} {\ & A_ {1,2} \} 2,2 A_ {\ \ A_. 1 { 1} \ & A_ {2,1
} \ & A_ {2,2} \} \) 행렬로 구성된다 :
있습니다 \ (A_ {2,2}는 \ {(X \ bigoplus K) \ & X (X \ bigoplus K) \ & K를 \} \ 최대 =)
도 있습니다 때문에 : \ ((X \ bigoplus K) \ & X \ & k = 0 \)
원래의 행렬에 기초하여 변형 될 :
우리가 원하는 그래서 \ ((X 축 \ bigoplus K) \ & X 축을> (X 축 \ bigoplus K) \ & K \) ,을 누른 상태로 유지하기 위해 (DP \) \ 연습 얻어진 결과 \ (0 \) .
그래서 \ (X \) 값은 매우 중요합니다. \ (X \) 보다주의해야 \ (\ {} 최대 K_)가 크고이다 \ (2 \) 정수 전력 등 (\ 2 ^ {17}) \ .
그래서 \ (DP \) 의 최대 값을 취득한다 (\ (X \ bigoplus K)
\ 및 X \ & k = 0 \) 의 실제 최대 \ ((X ^ K) \ & K = K를 \) .
최종 행렬이다 :
코드 :
C ++ :
#include <bits/stdc++.h>
using namespace std;
int main()
{
int k;
scanf("%d",&k);
printf("2 3\n");
int x=1<<17;
printf("%d %d %d\n",x^k,x,0);
printf("%d %d %d\n",k,x^k,k);
return 0;
}
파이썬 :
k=int(input())
print("2 3\n")
x=1<<17
print(x^k,x,0)
print(k,x^k,k)