求助
查看原帖
求助
229801
az__eg楼主2020/8/12 09:17
#include<cstdio>
#include<algorithm>
using namespace std;
typedef double d;
struct jjyz
{
	double p,d;	
};
jjyz jyz[1001];
d d1,c,d2;
int n;
d ans;
bool cmp(jjyz &a,jjyz &b);
void dn(int zd,int y,double q);
int main()
{
	int i,j;
	scanf("%lf%lf%lf%lf%d",&d1,&c,&d2,&jyz[1].p,&n);
	jyz[1].d = 0;
	for(i=2;i<=n+1;i++)
	{
		scanf("%lf%lf",&jyz[i].d,&jyz[i].p);
	}
	jyz[n+2].d = d1; 
	jyz[n+2].p=0;
	sort(jyz+1,jyz+n+2,cmp);
	dn(1,0,0);
	if(ans>=0.000001)
	printf("%.2lf",ans);
}
bool cmp(jjyz &a,jjyz &b)
{
	return a.d<b.d;
}
void dn(int zd,int y,double q)
{
	if(zd==n+2)
	{
		ans=q;
		return;
	}
	if(c*d2<jyz[zd+1].d-jyz[zd].d)
	{
		printf("No Solution\n");
		return;
	}
	int i,j;
	for(i=zd+1;i<=n+2;i++)
	{
		if(c*d2>jyz[i].d-jyz[zd].d)
		{
			if(jyz[i].p<jyz[zd].p)
			{
				dn(i,0,q+jyz[zd].p*((jyz[i].d-jyz[zd].d)/d2));
				return;
			}
		}
	}
	double mn=10000000.0;
	int wz=0;
	for(i=zd+1;i<=n+2;i++)
	{
		if(c*d2>jyz[i].d-jyz[zd].d)
		{
			if(mn>jyz[i].p)
			{
				mn=min(mn,jyz[i].p);
				wz=i;
			}
		}

	}
	dn(wz,0,q+jyz[zd].p*((jyz[wz].d-jyz[zd].d)/d2));
	return;
}
2020/8/12 09:17
加载中...