求调错
查看原帖
求调错
356081
Night_7d5楼主2022/2/13 06:21

第三个测试点wa

输入:

87.75 13.03 5.75 7.29 3

22.10 7.38

24.21 6.81

82.08 6.96

输出:

std:105.95

me:104.18

大体思路:递归+贪心

code:

#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
double d1,c,d2,p,dis[10],pri[10];
int n;
double ans=INF;
void dfs(int u,double cost1,double cost2,double E,double add) {
	if(double((d1-dis[u])*1.0/d2)<=E) {
		ans=min(ans,cost1);
	}
	else if(double((d1-dis[u])*1.0/d2)<=c) {
		ans=min(ans,cost1+(double((d1-dis[u])*1.0/d2)-E)*pri[u]);
	}
	for(int i=u+1;i<=n;i++) {
		if(double((dis[i]-dis[u])*1.0/d2)<=E) {
			if(pri[u]<pri[i]) {
				dfs(i,cost1+(c-E)*pri[u],cost2+double((dis[i]-dis[u])*1.0/d2),c-double((dis[i]-dis[u])*1.0/d2),add+c-E);
			}
			else {
				dfs(i,cost1,cost2+double((dis[i]-dis[u])*1.0/d2),E-double((dis[i]-dis[u])*1.0/d2),add);
			}
		}
		else if(double((dis[i]-dis[u])*1.0/d2)<=c) {
			if(pri[u]<pri[i]) {
				dfs(i,cost1+(c-E)*pri[u],cost2+double((dis[i]-dis[u])*1.0/d2),c-double((dis[i]-dis[u])*1.0/d2),add+c-E);
			}
			else {
				dfs(i,cost1+(double((dis[i]-dis[u])*1.0/d2)-E)*pri[u],cost2+double((dis[i]-dis[u])*1.0/d2),E,add+double((dis[i]-dis[u])*1.0/d2)-E);
			}
		}
	}
}
int main() {
	scanf("%lf%lf%lf%lf%d",&d1,&c,&d2,&p,&n);
	dis[0]=0,pri[0]=p;
	for(int i=1;i<=n;i++) {
		scanf("%lf%lf",&dis[i],&pri[i]);
	}
	dfs(0,0,0,0,0);
	if(ans==INF) printf("No Solution");
	else printf("%.2lf",ans);
	return 0;
}
2022/2/13 06:21
加载中...