数据过水
查看原帖
数据过水
1032391
ICE__LX楼主2025/2/5 14:59

O(n2)O(n^2) 级别的 dp 加点剪枝就过了?还跑得贼快?

建议 hack 以下的代码

#include<bits/stdc++.h>
using namespace std;
//#define int long long
#define I_love_Foccarus return
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define deap(i,a,b) for(int i=b;i>=a;i--)
#define in(a) a=read()
#define fi first
#define se second
const int N = 1e5 + 5;
const int inf = INT_MAX;
inline int read() {
	int x=0,f=1;
	char ch=getchar();
	while (ch<'0'||ch>'9') {
		if (ch=='-') f=-1;
		ch=getchar();
	}
	while (ch>='0'&&ch<='9') {
		x=x*10+ch-48;
		ch=getchar();
	}
	I_love_Foccarus x*f;
}
void fast() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
}
int a[N],dp[N],ans;
signed main() {
	//fast();
	int n;
	in(n);
	rep(i,1,n)in(a[i]);
	dp[1]=1;
	rep(i,2,n) {
		int tmp=0;
		deap(j,1,i-1){
		if((a[i]&a[j])!=0) {
			tmp=max(tmp,dp[j]);  
		}	
		if(j<tmp)break;
		}
		
		dp[i]=tmp+1;
		ans=max(ans,dp[i]);
	}
	cout<<ans;
	I_love_Foccarus 0;
}		
2025/2/5 14:59
加载中...