请求加强数据
查看原帖
请求加强数据
1066759
wyyaybmq楼主2024/7/24 15:17

写了个O(n2)O(n^2)复杂度的暴力dp,优化了一下:先判断能否由i之前的最大值转移而来,再去枚举j,每次记录一下min(fi)min(f_i)

#include<bits/stdc++.h>
#define dbug(x) cerr<<(#x)<<':'<<(x)
#define f(i,a,b) for(int i=a;i<=b;i++)
#define ff(i,a,b) for(int i=a;i>=b;i--)
#define maxn 100099
using namespace std;
int a[maxn],f[maxn];
signed main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int n;
	cin>>n;
	for(int i=1; i<=n; i++)cin>>a[i];
	f[1]=1;
	int maxf=0,maxidx=0;
	for(int i=2; i<=n; i++) {
		if(a[maxidx]&a[i]) {
			f[i]=f[maxidx]+1;
		} else {
			for(int j=1; j<i; j++) {
				if(a[i]&a[j])f[i]=max(f[i],f[j]+1);
			}
		}
		if(f[i]>maxf) {
			maxf=f[i];
			maxidx=i;
		}
	}
//	f(i,1,n)cout<<f[i]<<' ';
	int ans=0;
	f(i,1,n)ans=max(ans,f[i]);
	cout<<ans;
	cout<<flush;
	return 0;
}

没开O2过了

2024/7/24 15:17
加载中...