Knapsack Cryptosystem
Knapsack Cryptosystem 超大背包 折半查找 #include<bits/stdc++.h> using namespace std; typedef long long ll; #define P pair<ll,int> ll A[39]; ll C[39]; bool B[39]; ll s,_n; vector<P> v1,v2; void dfs(int i,ll x,int n,bool f) { P a; a.first=x; int t=0; if(f) for(int i=0; i<n; i++) { t=t*2+B[i]; } else { for(int i=_n/2; i<n; i++) { t=t*2+B[i]; } } a.second=t; if(f) v1.push_back(a); else v2.push_back(a); if(i==n)return ; else { B[i]=1; dfs(i+1,x+A[i],n,f); B[i]=0; dfs(i+1,x,n,f); } } int main() { scanf("%lld%lld",&_n,&s); for(int i=0; i<_n; i++) { scanf("%lld",&A[i]); } dfs(0,0,_n/2,1); dfs(_n/2,0,_n,0);