27tps 求调
查看原帖
27tps 求调
783233
1925153zty楼主2023/10/19 18:49

用的是和关路灯一样的思路,统计总花费

#include<bits/stdc++.h>
using namespace std;
const int N=1e3+5;
int n;
double x0;
double f[N][N][2],ss[N];
struct dd
{
	double x,y,v;
}p[N];
bool cmp(const dd&a,const dd&b)
{
	return a.x<b.x;
}
int main()
{
	scanf("%d%d",&n,&x0);
	for(int i=1;i<=n;i++)
	cin>>p[i].x;
	for(int i=1;i<=n;i++)
	cin>>p[i].y;
	for(int i=1;i<=n;i++)
	cin>>p[i].v;
	sort(p+1,p+n+1,cmp);
	for(int i=1;i<=n;i++)
	ss[i]=ss[i-1]+(p[i].v)/1000.000;
	for(int i=1;i<=n;i++)
	f[i][i][0]=f[i][i][1]=abs(x0-p[i].x)*ss[n];
	for(int i=2;i<=n;i++)
	for(int j=1;j+i-1<=n;j++)
	{
		int r=j+i-1;
		f[j][r][0]=min(f[j+1][r][0]+abs(p[j].x-p[j+1].x)*(ss[n]-ss[r]+ss[j]),f[j+1][r][1]+abs(p[r].x-p[j].x)*(ss[n]-ss[r]+ss[j]));
		f[j][r][1]=min(f[j][r-1][0]+abs(p[j].x-p[r].x)*(ss[n]-ss[r-1]+ss[j-1]),f[j][r-1][1]+abs(p[r].x-p[r-1].x)*(ss[n]-ss[r-1]+ss[j-1]));
	}
	double ans=0.00;
	for(int i=1;i<=n;i++)
	ans+=p[i].y/1000.000;
	printf("%0.3f",ans-min(f[1][n][0],f[1][n][1]));
}
2023/10/19 18:49
加载中...