有那个大佬帮忙优化一下动态规划代码,悬2关
  • 板块学术版
  • 楼主naroto2022
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/5/19 16:24
  • 上次更新2024/5/19 17:02:19
查看原帖
有那个大佬帮忙优化一下动态规划代码,悬2关
734703
naroto2022楼主2024/5/19 16:24
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const int mod=998244353;
const int MN=2005;
long long n,ans,num,a[MN],dp[MN][MN],s[MN];
//前i个数分成j段最多的办法
int main(){
	scanf("%lld",&n);
	for(int i=1; i<=n; i++){
		scanf("%lld",&a[i]);
		s[i]=s[i-1]+a[i];
	}
	dp[1][1]=1;
	for(int r=2; r<=n; r++)
		for(int l=1; l<=r; l++){
			num=s[r]-s[l-1];
			for(int j=1; j<=l; j++) if(num%j==0) dp[r][j]=max(dp[r][j],(dp[l-1][j-1]+dp[l-1][j])%mod);
		}
	for(int i=1; i<=n; i++) ans=(ans+dp[n][i])%mod;
	printf("%lld",ans);
	return 0;
}

有哪位大佬可以帮忙优化一下这个代码(时间复杂度降到 O(n)O(n)),给两个关注!

2024/5/19 16:24
加载中...