子序列的权值最小值


 

给定一个长度为 n 的数组 a,求数组所有非空子序列权值的最小值。

定义子序列 ai​,aj​,…,ak​ 的权值为 ai & aj & ak

其中 && 为二进制中的按位与

按位与的定义:按位与_百度百科

输入描述:

 
   

第一行包含一个正整数 n(1≤n≤20) 代表数组长度。

第二行包含 n 个正整数 ai. (1≤ai​≤109) 代表数组中每个数的值。

输出描述:

输出数组中所有非空子序列权值的最小值。

示例1

输入

6
1 1 4 5 1 4
#include 
#include 
using namespace std;

int main(){
    int n,s[25],ans=0x3f3f3f3f;
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d",&s[i]);
    }
    int sum = 0;
    for(int k=1;k<=n;k++) {
        for (int i = k; i <= n; i++) {
            for (int j = k; j <= i; j++) {
                if (j == k)
                {
                    sum = s[j];
                }
                else
                    sum &= s[j];
            }
            ans= min(ans,sum);
        }
    }
    printf("%d",ans);
    return 0;
}

输出

0

备注:

子序列不一定连续

你可能感兴趣的:(算法,c++,数据结构)