题目链接
https://contest.ucup.ac/contest/1382/problem/7566
代码:
#include<bits/stdc++.h>
using namespace std;
const int N =( 1 << 24 )+ 5 ;
#define int long long
int sum[N] , f[N] ;
void solve(){
int n;
cin >> n;
int a[28] = {};
for (int i = 1;i <= n;i ++)
cin >> a[i];
vector<int> c;
for (int i = 1;i <= n + 1;i ++){
if (a[i] - a[i - 1] != 0) c.push_back(a[i] - a[i - 1]);
}
int num = c.size();
for (int i = 0;i < (1 << num);i ++){
for (int j = 0;j < num;j ++)
if ((i >> j) & 1) sum[i] += c[j];
}
for (int i = 1;i <= (1 << num);i ++){
if (sum[i] == 0) f[i] ++;
for (int j = 0;j < num;j ++)
if (!((i >> j) & 1)) f[i | (1ll << j)] = max(f[i | (1ll << j)],f[i]);
}
cout << num - f[(1 << num) - 1] << "\n";
}
signed main(){
//cout << N << endl;
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int t = 1;
// cin >> t;
while(t --){
solve();
}
}