Codeforces Round #630 (Div. 2) D. Walk on Matrix (思维&DP)

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;
}
发布了63 篇原创文章 · 获赞 49 · 访问量 2869

猜你喜欢

转载自blog.csdn.net/weixin_45750972/article/details/105245248