自己写的RMQ优化dp,为什么输出0啊
查看原帖
自己写的RMQ优化dp,为什么输出0啊
469470
EurekaStriker楼主2022/11/7 18:56
#include<bits/stdc++.h>
using namespace std;
long long pre,lg[100010],dp[100010],sum,n,m,a[100010],f[100010][20],q[100010];
int main()
{
	cin>>n>>m;
    for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);
        f[i][0]=a[i];
        if(a[i]>m)
        {
        	cout<<"-1";
        	return 0;
		}
    }
    dp[1]=a[1]; 
    for(int i=2;i<=n;i++)
        lg[i]=lg[i>>1]+1;
    for(int i=1;(1<<i)<=n;i++)
            for(int j=1;j+(1<<i)-1<=n;j++)
                f[j][i]=max(f[j][i-1],f[j+(1<<(i-1))][i-1]);
    for(int i=1;i<=n;i++)
    {
        sum+=a[i];
        while(sum>m)
        	sum-=a[++pre];
        int x=pre+1,y=i;
        dp[i]=min(dp[i],dp[pre]+max(f[x][lg[y-x+1]],f[y-(1<<lg[y-x+1])+1][lg[y-x+1]]));
    }
    cout<<dp[n];
}
2022/11/7 18:56
加载中...