南京网站开发南京乐识好柳市网站建设
2026/1/16 1:59:28 网站建设 项目流程
南京网站开发南京乐识好,柳市网站建设,网站自己的,网站做广告如何做帐这一题的大意是从杭州到目的地#xff0c;让我们找需要花费最少多少钱用于加油。要注意的是在沿途中有加油站#xff0c;不同加油站的价格也各不相同#xff0c;油箱中的油有限#xff0c;我们如何选择加油#xff0c;能花费最少的达到目的地呢#xff1f; 这一题要用到贪…这一题的大意是从杭州到目的地让我们找需要花费最少多少钱用于加油。要注意的是在沿途中有加油站不同加油站的价格也各不相同油箱中的油有限我们如何选择加油能花费最少的达到目的地呢这一题要用到贪心即当我们达到一个站点的时候我们看如果在这个站点加满油能跑的距离内有没有比当前站点油价更便宜的加油站如果有我们只需要在当前加油站加到能跑到更便宜的油即可如果没有那么说明当前的加油站的油就是最便宜的加满即可。如果最终达到不了终点那么输出最远能到的距离。最开始油箱为空。接下来我们就需要分情况讨论了如果起点没有加油站那么就直接输出最远距离为0。如果有加油站我们就从起点开始按照贪心的思路来加油 即我们看如果在这个站点加满油能跑的距离内有没有比当前站点油价更便宜的加油站如果有我们只需要在当前加油站加到能跑到更便宜的油即可如果没有那么说明当前的加油站的油就是最便宜的加满即可。要注意如果当前的加油站的油就是最便宜我们不一定非要找下一个站点可以看是否能通过当前站点直接到终点。测试点4如果在当前站点无法直接到终点那么我们就看有没有后继加油站如果有我们就加满油跑到后继的加油站必须加满因为后继的加油站的油价比当前的贵尽可能少加如果没有后继节点那么我们只能选择从当前节点看能不能跑到终点。如果能输出cost如果不能输出最大跑的距离。完整代码如下#includebits/stdc.h#includeiostreamusingnamespacestd;//驾驶一个汽车从杭州到其他任意城市是容易//但一个车的油箱容量是有限的//我们不得不找加油站有时//不同的汽油站可能给出不同的价格//你被要求去设计最便宜的路径去走structnode{intd;doubleprice;}n[505];boolcmp(node a,node b){if(a.db.d){returntrue;}elseif(a.db.d){if(a.priceb.price){returntrue;}else{returnfalse;}}else{returnfalse;}}intmain(){intCmax;//油箱容量cinCmax;intD;//杭州到目的地的距离//每一单元油能跑的平均距离// 汽油站总共的数量// 下面N个数分别表示 油价和这个停车场距离杭州的距离//cinD;intDavg;cinDavg;intN;cinN;for(inti0;iN;i){cinn[i].pricen[i].d;}sort(n,nN,cmp);doublemaxdistance0.00;doublecost0.00;doublecapcility0;if(n[0].d!0){//说明在0点出没有加油站printf(The maximum travel distance %.2f,maxdistance);return0;}intcur0;while(curN){doubleminn1e18;intindex-1;for(inticur1;iNn[i].dn[cur].dCmax*Davg;i){//说明i这个节点可用到达if(n[i].priceminn){minnn[i].price;indexi;}if(n[i].pricen[cur].price){minnn[i].price;indexi;break;//说明比当前的油价还要低//那么我们就应该先跑到油价最低的位置}}if(minnn[cur].price){//只需要加能到index站点的油即可doubledistancen[index].d-n[cur].d;//这是两者的距离doubleqiantity1.00*distance/Davg;//需要的油量if(capcilityqiantity){capcility-qiantity;}else{cost(qiantity-capcility)*n[cur].price;//再加这么多油capcility0;}maxdistancedistance;}elseif(n[cur].dCmax*DavgD){//说明我们可用直接跑过去了不用再找中间点了中间点也起不到减少耗费的作用doubleenddistanceD-n[cur].d;doubleqiantity1.00*enddistance/Davg;if(capcilityqiantity){capcility-qiantity;}else{cost(qiantity-capcility)*n[cur].price;//再加这么多油capcility0;}printf(%.2f,cost);break;}elseif(minnINT_MAX){//说明存在下一站//我们要在当前站加满油cost(Cmax-capcility)*n[cur].price;capcilitymax(0.0,Cmax-(1.00*(n[index].d-n[cur].d)/Davg));maxdistancen[index].d-n[cur].d;}else{//说明没有下一站可用用来加油了//必须保证当前加满油看能不能能跑到终点////我们看一下从当前站点到终点站的距离doubleenddistanceD-n[cur].d;doubleqiantity1.00*enddistance/Davg;if(Cmax*DavgD-n[cur].d){//说明加满油能跑到if(capcilityqiantity){capcility-qiantity;}else{cost(qiantity-capcility)*n[cur].price;//再加这么多油capcility0;}//说明能到达终点printf(%.2f\n,cost);break;}else{maxdistancen[cur].dCmax*Davg;printf(The maximum travel distance %.2f\n,maxdistance);break;}}if(index!-1){curindex;}}return0;}总结这一题是贪心的思路我们要找到最优的思路这是这一题的第一大难点第二大难点就是我们需要分情况讨论想好各种情况。贪心往往也会涉及到排序

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询