csu 1548 Road And Bridge

                                           Road And Bridge

 思路:不要管河的位置都移到一边(右)+三分

Description

You need to design road from (0, 0) to (x, y) in plane with the lowest cost. Unfortunately, there are N Rivers between (0, 0) and (x, y).It costs c1 Yuan RMB per meter to build road, and it costs c2 Yuan RMB per meter to build a bridge. All rivers are parallel to the Y axis with infinite length.

Input

There are several test cases.
Each test case contains 5 positive integers N,x,y,c1,c2 in the first line.(N ≤ 1000,1 ≤ x,y≤ 100,000,1 ≤ c1,c2 ≤ 1000).
The following N lines, each line contains 2 positive integer xi, wi ( 1 ≤ i ≤ N ,1 ≤ xi ≤x, xi-1+wi-1 < xi , xN+wN ≤ x),indicate the i-th river(left bank) locate xi with wi width.
The input will finish with the end of file.

Output

For each the case, your program will output the least cost P on separate line, the P will be to two decimal places .

Sample Input

1 300 400 100 100
100 50
1 150 90 250 520
30 120

Sample Output

50000.00
80100.00
//AC代码
#include<cstdio>
#include<cmath>
int  n;
double x1,y2,c1,c2,wid,real;
double fff(double y)
{
	return c1*sqrt(real*real+y*y)+c2*sqrt(wid*wid+(y2-y)*(y2-y));
}
int main()
{
	while(scanf("%d %lf %lf %lf %lf",&n,&x1,&y2,&c1,&c2)!=EOF)
	{
		int x,y;
		double min,mid,midd,max;
	        wid=0;
		while(n--)
		{
		 scanf("%d%d",&x,&y);
		 wid+=y;
		}
	    real=x1-wid;
	    min=0;
	    max=y2;
	    while((max-min)>1e-4)
	    { 
    		mid=(min+max)/2;
    		midd=(mid+max)/2;
    		if(fff(mid)<fff(midd)) max=midd;
    		else min=mid;
    	}
		printf("%.2lf\n",fff(mid));	
	
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值