本文共 836 字,大约阅读时间需要 2 分钟。
题意:给n个数,找出与之对应取 & 等于 0的最小值
逆推 由1 << 22 -1 递推到0
题解:
#include#include #include #include using namespace std;const int M = (1<<22) - 1;int dp[M+5];int a[M+5];int main(){ int n; while(cin >> n){ memset(dp,0,sizeof(dp)); for(int i = 0;i < n;i++){ cin >> a[i]; dp[a[i]^M] = a[i]; } for(int i = M;i >= 0;i--){ if(!dp[i]){ for(int j = 0;j < 22;j++){ if(dp[i|(1< < n;i++){ if(dp[a[i]]) { if(i) cout << " " << dp[a[i]]; else cout << dp[a[i]]; } else { if(i) cout << " " << "-1"; else cout << "-1"; } } cout << endl; }}
转载地址:http://jdsgi.baihongyu.com/