求助(站外题)
  • 板块学术版
  • 楼主_Kevin_Kaslana_
  • 当前回复5
  • 已保存回复5
  • 发布时间2024/7/29 14:17
  • 上次更新2024/7/29 15:20:23
查看原帖
求助(站外题)
749194
_Kevin_Kaslana_楼主2024/7/29 14:17

本人用的区间DP,TLE90分,不知道是不是思路错了,求助

本人的屎山代码:

#include <bits/stdc++.h>
using namespace std;
const int N=3000+10;

int n,k;
int a[N];
int dp_min[N][N];
int dp_max[N][N];

int main()
{
	cin>>n>>k;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	for(int i=1;i<=n;i++) dp_max[i][i]=a[i]/k;
	for(int i=1;i<=n;i++) dp_min[i][i]=a[i]/k;
	for(int len=2;len<=n;len++)
	{
		for(int l=1;l<=n-len+1;l++)
		{
			int r=l+len-1;
			
			dp_max[l][r]=0x3f3f3f3f;

			for(int i=1;i<=k;i++)
			{
				int res,c,mx,mn;

				res=a[l]/i;
				mx=max(res,dp_max[l+1][r]);
				mn=min(res,dp_min[l+1][r]);
				if(mx-mn<=dp_max[l][r]-dp_min[l][r])
				{
					dp_max[l][r]=mx;
					dp_min[l][r]=mn;
				}

				res=a[r]/i;
				mx=max(res,dp_max[l][r-1]);
				mn=min(res,dp_min[l][r-1]);
				if(mx-mn<=dp_max[l][r]-dp_min[l][r])
				{
					dp_max[l][r]=mx;
					dp_min[l][r]=mn;
				}

			}
			//printf("dp_max[%d][%d]=%d;dp_min[%d][%d]=%d\n",l,r,dp_max[l][r],l,r,dp_min[l][r]);
		}
	}
	cout<<dp_max[1][n]-dp_min[1][n]<<endl;
	return 0;
}






2024/7/29 14:17
加载中...