玄关求调
查看原帖
玄关求调
696711
pengrongxuan楼主2025/7/20 15:03

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;
}
2025/7/20 15:03
加载中...