[Vijos1149]驾车旅游解题报告
2014-12-01 18:44
211 查看
这道题最关键的地方就是对除非汽车无法用油箱里的汽油达到下一个加油站或目的地,在油箱里还有不少于最大容量一半的汽油时,驾驶员从不在加油站停下来。这句话的翻译,我一开始想错了,真正清晰的等价叙述应为:
驾驶员可以在油站停下来,当当前油箱里的汽油小于最大容量的二分之一或汽车无法用油箱里的汽油达到下一个加油站或目的地;
驾驶员可以不在油站停下来,当汽车可以用当前油箱里的汽油达到下一个加油站或目的地。
驾驶员可以在油站停下来,当当前油箱里的汽油小于最大容量的二分之一或汽车无法用油箱里的汽油达到下一个加油站或目的地;
驾驶员可以不在油站停下来,当汽车可以用当前油箱里的汽油达到下一个加油站或目的地。
#include<iostream> using namespace std; #include<cstdio> #include<cmath> #include<algorithm> #include<cstring> float minx[51],ans=0x7fffffff,v,S; int n; struct S{ float x,p; inline bool operator < (S a) const { return x<a.x; } }a[51]; inline void dfs(int x,float V,float now){ if(x==n){ ans=min(ans,now); return; } if(now+max((float)0,((a .x-a[x].x)/S-V))*minx[x]>=ans)return; if(V<v/2||V*S<a[x+1].x-a[x].x)dfs(x+1,v-(a[x+1].x-a[x].x)/S,now+(v-V)*a[x].p+20); if(V*S>=a[x+1].x-a[x].x)dfs(x+1,V-(a[x+1].x-a[x].x)/S,now); } int main(){ float ww; scanf("%f%f%f%f%d",&a[50].x,&v,&S,&ww,&n); a .x=a[50].x; int i; for(i=0;i<n;++i)scanf("%f%f",&a[i].x,&a[i].p); sort(a,a+n); minx[n-1]=a[i].p; for(i=n-2;i>-1;--i)minx[i]=min(minx[i+1],a[i].p); dfs(0,v-a[0].x/S,ww); printf("%.1f",ans); }
相关文章推荐
- 解题报告 之 POJ1149 Pigs
- 【观光旅游】解题报告
- 旅游路线 解题报告
- Vijos_P1001_谁拿了最多奖学金_解题报告_C
- POJ 1149 PIGS 解题报告
- NOI1994 最佳旅游路线 解题报告
- POJ 1149 网络流最大流 解题报告
- 【解题报告】Vijos1143 三取方格数
- vijos P1005 超长数字串 解题报告
- 【解题报告】Vijos1143 三取方格数
- vijos1037 搭建双塔(重庆一中高2018级信息学竞赛测验7) 解题报告
- [dp问题] Poj 1014 & Zoj 1149 (Dividing) 解题报告(转)
- POJ 1149 解题报告
- 学姐吃牛排[Vijos1987]解题报告
- vijos1060 盒子(重庆一中高2018级信息学竞赛测验7) 解题报告
- vijos1488 路灯改建计划(重庆一中高2018级信息学竞赛测验9) 解题报告
- Vijos1114解题报告(不建树解决二叉树问题)
- 【解题报告】Vijos1143 三取方格数
- hhu 5177 旅游路线 floyd 解题报告
- Vijos_P1078_松鼠吃果子_解题报告_C