Codeforces Round #630 (Div. 2) D. Walk on Matrix (思维&DP)
题意:给定用DP计算的矩阵错误异或和与正确异或和的差值,构造这样一个矩阵。
思路:显然对于&运算DP的方法是错的,因为前一个状态的最优&当前位置不一定是最优,即不满足最优子结构的性质。所以我们选取一个略大于k的二乘方数 比如(2^17=131072),前一个状态位置的数定义为 2 ^17 +k,让DP方法的一个结果为2^ 17,正确结果为k,这样2^ 17>k,DP会选择2^17,最后再跟k进行一次&运算,结果会是0,而后一种k&k=k,刚好满足。
#include<bits/stdc++.h>
using namespace std;
const int a=(1<<17);//略大于1e5
int main(){
int k;
cin>>k;
printf("2 3\n");
printf("%d %d 0\n",a+k,k,0);
printf("%d %d %d\n",a,a+k,k);
return 0;
}