给定一个长度为 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 <iostream> #include <algorithm> 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备注:
子序列不一定连续
子序列的权值最小值
最新推荐文章于 2022-12-16 22:01:05 发布