朴素的DP,10分求调
查看原帖
朴素的DP,10分求调
492276
nivxuan楼主2024/10/16 13:32

为什么朴素的DP会有WA啊?不应该错的全是TLE吗。所以我认为我的代码仍然有问题且不为优化。

#include <bits/stdc++.h>

using namespace std;
int a[500100];
int f[500100];//f[i]以a[i]为结尾的最长的子序列的长度
int n;
int main() {
	scanf("%d",&n);
	for(int i=1; i<=n; i++) {
		scanf("%d",&a[i]);
	}
	for(int i=1; i<=n; i++) {
		f[i]=1;
	}
	for(int i=1; i<=n; i++) {
		for(int j=1; j<i; j++) {
//			printf("\nIn %d(%d) and %d(%d):",a[i],i,a[j],j);
//			int tmp=f[i];
			if(f[j]%2==0 and a[j]!=a[i]) {
//				cout<<"1"<<" ";
				f[i]=max(f[i],f[j]+1);
			} else if(f[j]%2==1 and a[j]==a[i]) {
//				cout<<"2"<<" ";
				f[i]=max(f[i],f[j]+1);
			}
//			printf(",and the result from %d change to %d",tmp,f[i]);
		}
	}
//	cout<<endl;
//	for(int i=1;i<=n;i++){
//		cout<<f[i]<<" ";
//	}
//	cout<<endl;
	if(f[n]%2!=0) {
		printf("%d",f[n]-1);
	} else {
		printf("%d",f[n]);
	}
	return 0;
}

评测结果

2024/10/16 13:32
加载中...