论《浅谈ZKP问题》
查看原帖
论《浅谈ZKP问题》
101694
yummyeaten楼主2020/10/1 00:34

在 @2018肖伟文 的博客里,提到了一种搜索+剪枝解决零一背包的思路,并给出了两个剪枝方案。

首先,在你没思路的时候, 这两个剪枝方案是很有用的,尤其是CSP赛前我们可能确实需要这方面的技巧。

但是,由于作者没有对这两种剪枝的复杂度进行解析,实际上它们即使剪了枝,复杂度仍然为指数级,别说 n103n\le 10^3 了,连本题的范围其实搜索都过不了。

不过作者想到了剪枝方案2比剪枝方案1更难卡,至少在我的水平下:剪枝1我能卡成 O(2N)O(2^N),但是剪枝2我只能卡成 O(2min{N,T})O(2^{\min\{N,\sqrt{T}\}})

下面我分别给出两种剪枝方案对应的一种卡法,望管理加入数据:

#include<bits/stdc++.h>
using namespace std;
int n=100,t=1000;
int main(){
	printf("%d %d\n",t,n);
	for(int i=1;i<n;i++)printf("%d %d\n",2,2);
	printf("%d %d",t-1,4*n);
	return 0;} 
#include<bits/stdc++.h>
using namespace std;
int n=100,t=1000;
int main(){
	printf("%d %d\n",t,n);
	for(int i=1;i<n;i++)printf("%d %d\n",i,i);
	printf("%d %d",t-1,n-1);
	return 0;} 
2020/10/1 00:34
加载中...