本文主要是介绍牛客 子序列的权值最小值(贪心),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
链接:https://ac.nowcoder.com/acm/contest/76803/A
来源:牛客网
题目描述
给定一个长度为 n n n 的数组 a a a,求数组所有非空子序列权值的最小值。
定义子序列 a i , a j , … , a k a_i,a_j,…,a_k ai,aj,…,ak 的权值为 a i a_i ai & a j a_j aj & … & a k a_k ak
其中 & 为二进制中的按位与
输入描述:
第一行包含一个正整数 n n n ( 1 ≤ n ≤ 20 ) (1≤n≤20) (1≤n≤20) 代表数组长度。
第二行包含 n n n 个正整数 a i a_i ai ( 1 ≤ a i ≤ 1 0 9 ) (1≤a_i≤10^9) (1≤ai≤109)代表数组中每个数的值。
输出描述:
输出数组中所有非空子序列权值的最小值。
示例1
输入
6
1 1 4 5 1 4
输出
0
一个知识点: a a a & b < = m i n ( a , b ) b <= min(a,b) b<=min(a,b),所以每次 & 运算都一定会得到一个更小的数或者相等的数,不会出现更大的。
所以只要我们取一个变量为第一个最小的输入的值,然后让他从头 & 到尾,然后每次如果得到了更小的值,就更新最小值为这个更小的数。
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 25;
int a[N];
int main(){int n;cin >> n;for(int i = 1;i <= n;i++)cin >> a[i];sort(a+1,a+n+1);int res = a[1];int mm = a[1];for(int i = 1;i <= n;i++){if((mm = mm&a[i]) < res){res = mm;}}cout << res;return 0;
}
这篇关于牛客 子序列的权值最小值(贪心)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!