90pts求助
  • 板块学术版
  • 楼主_Kevin_Kaslana_
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/11/4 22:14
  • 上次更新2024/11/5 11:35:55
查看原帖
90pts求助
749194
_Kevin_Kaslana_楼主2024/11/4 22:14

这个题只有九十分

#include<bits/stdc++.h>
using namespace std;
const int N=1000;
int n,_x;
struct node{
	int x,y,v;
}a[N+5];
int sum[N+5];
int dp[N+5][N+5][2];
double ans=0;
int cal(int l,int r,int time)
{
	return (sum[l-1]+sum[n]-sum[r])*time;
}
bool cmp(node a,node b)
{
	return a.x<b.x;
}
signed main()
{
	cin>>n>>_x;
	memset(dp,0x3f,sizeof dp );
	a[n+1]={_x,0,0};
	for(int i=1;i<=n;i++)
	{
		cin>>a[i].x;
		if(a[i].x==_x) s=0;
	}
	for(int i=1;i<=n;i++)
	{
		cin>>a[i].y;
	}
	for(int i=1;i<=n;i++)
	{
		cin>>a[i].v;
	}
	n++;
	stable_sort(a+1,a+n+1,cmp);
	for(int i=1;i<=n;i++)
	{
		if(a[i].x==_x)
		{
			dp[i][i][0]=dp[i][i][1]=0;
		}
		sum[i]=sum[i-1]+a[i].v;
		ans+=a[i].y;
	}
	for(int len=2;len<=n;len++)
	{
		for(int l=1;l<=n-len+1;l++)
		{
			int r=l+len-1;
			dp[l][r][0]=min(dp[l+1][r][0]+cal(l+1,r,a[l+1].x-a[l].x),dp[l+1][r][1]+cal(l+1,r,a[r].x-a[l].x));
			dp[l][r][1]=min(dp[l][r-1][0]+cal(l,r-1,a[r].x-a[l].x),dp[l][r-1][1]+cal(l,r-1,a[r].x-a[r-1].x));
		}
	}
	printf("%.3lf",(ans-min(dp[1][n][0],dp[1][n][1]))/1000.0);
	return 0;
}
2024/11/4 22:14
加载中...