题意:
构造一个矩阵,使得从左上角到右下角实际的最大值比题目提供的 \(dp\) 方法大 \(k\)。
分析:
使得 \(dp\) 所求出的最大值为 \(0\),实际最大值为 \(k\)。
对于矩阵:
\[ \left[ \begin{matrix} a_{1,1} & a_{1,2} \\ a_{2,1} & a_{2,2} \end{matrix} \right] \]
按照题目给的 \(dp\) 的做法,
\(a_{2,2}=max\{a_{1,1}\&a_{1,2}\&a_{2,2}\ ,\ a_{1,1}\&a_{2,1}\&a_{2,2}\}\)
构造矩阵:
\[ \left[ \begin{matrix} x \bigoplus k & x \\ k & x \bigoplus k \end{matrix} \right] \]
有:\(a_{2,2}=max\{(x \bigoplus k)\&x,(x \bigoplus k)\&k \}\)
又因为有:\((x \bigoplus k)\&x \&k=0\)
在原有矩阵的基础上进行修改:
\[ \left[ \begin{matrix} x \bigoplus k & x & 0\\ k & x \bigoplus k & k \end{matrix} \right] \]
所以我们要使的 \((x \bigoplus k)\&x > (x \bigoplus k)\&k\),才能保证按 \(dp\) 做法求出的结果为 \(0\)。
那么 \(x\) 的取值就很关键。\(x\) 应该取比 \(k_{max}\) 大且为 \(2\) 的整数次幂,如 \(2^{17}\)。
所以 \(dp\) 取得的最大值为 \((x \bigoplus k)\&x \&k=0\)
实际最大值为 \((x^k)\&k=k\)。
最终矩阵为:
扫描二维码关注公众号,回复:
10505473 查看本文章
\[ \left[ \begin{matrix} 2^{17} \bigoplus k & 2^{17} & 0\\ k & 2^{17} \bigoplus k & k \end{matrix} \right] \]
代码:
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;
}
python:
k=int(input())
print("2 3\n")
x=1<<17
print(x^k,x,0)
print(k,x^k,k)