查看原帖
1115904
malinhao45楼主2025/1/29 11:02

为什么用st表做只能得10分

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m;
int a[1000000];
int f[1000000][21];
int dp[100000];
signed main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		f[i][0]=a[i];
	}
	for(int j=1;j<=19;j++){
		for(int i=1;i+(1<<j)-1<=n;i++){
			f[i][j]=max(f[i][j-1],f[i+1<<(j-1)][j-1]);
		}
	}
	dp[1]=a[1];
	for(int i=2;i<=n;i++){
		for(int j=max(1ll,i-m+1);j<=i;j++){
			int k=log2(i-j+1);
			dp[i]=max(dp[i],dp[j-1]+max(f[j][k],f[i-(1<<k)+1][k])*(i-j+1));
		}
	}
	cout<<dp[n]<<endl;
}

去掉st表,用像题解一样的的方法求最大值就得100?

2025/1/29 11:02
加载中...