80分,最后一组数据TLE和Wa了
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int MAXN=55;
const int MAXK=10005;
const int INF=2e+18;
int op,n,l,r,k,w,ans=INF;
int a[MAXN],f[MAXN][MAXN][MAXK];
inline int read()
{
int f=1,k=0;
char c=getchar();
while(c<'0'||c>'9')
{
if(c=='-')
{
f=-1;
}
c=getchar();
}
while(c>='0'&&c<='9')
{
k=(k<<1)+(k<<3)+(c^48);
c=getchar();
}
return f*k;
}
signed main()
{
n=read(),l=read(),r=read(),k=read();
for(int i=1;i<=n;i++)
{
a[i]=read();
}
for(int j=0;j<=r-l+1;j++)
{
for(int t=0;t<=k;t++)
{
f[0][j][t]=INF;
f[1][j][t]=INF;
}
}
f[1][0][0]=0;
for(int i=1;i<=n;i++)
{
for(int j=0;j<=min(r-l+1,i);j++)
{
w=abs(l+j-1-i);
for(int t=0;t<=k;t++)
{
f[op][j][t]=f[op^1][j][t];
if(j>=1&&t>=w)
{
f[op][j][t]=min(f[op^1][j][t],f[op^1][j-1][t-w]+a[i]);
}
}
}
op^=1;
}
for(int t=0;t<=k;t++)
{
ans=min(ans,f[op^1][r-l+1][t]);
}
printf("%lld",ans);
return 0;
}