NOJ1149 旅游预算(动态规划)

发布时间:2024-12-15 02:08

旅游前规划好预算,避免超支 #生活常识# #消费指南#

最新推荐文章于 2021-01-27 02:17:39 发布

一个低调的帅哥 于 2018-10-31 23:17:12 发布

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本菜不会写,看了别人的博客才恍然大悟,细节很多,具体再注释中可以体现。

友情链接:

https://blog.csdn.net/zhao2018/article/details/83420944

//F

#include<stdio.h>

#include<string.h>

#define MAXN 60

#define INF 0x3f3f3f3f

double dp[MAXN];//dp[i]从第i个加油站到终点的最小费用(循环体是逆序)不包括在i点加油的费用,而且在i点必须加油

double dis[MAXN];//每个加油站到起点的距离

double price[MAXN];//加油站的油价

int record[MAXN];//记录加油站的序号

int Link[MAXN][MAXN];

int main()

{

int i,j;

int cnt;

double alllen;//起点到终点的总距离

double oilbox,km_oil,cost;//油箱容量,每升油的最大行驶公里数,起点加油的初始费用,加油站的数量

int num;

double temp;

int u;

scanf("%lf",&alllen);

scanf("%lf%lf%lf%d",&oilbox,&km_oil,&cost,&num);

for(i=1;i<=num;i++)

scanf("%lf%lf",&dis[i],&price[i]);

i=num;

while((alllen-dis[i])/km_oil<=oilbox)

dp[i--]=0;

dis[num+1]=alllen;

dis[0]=0;

//cnt=0;

memset(Link,0,sizeof(Link));

for(;i>=0;i--)//0是起点,此处一定要遍历到0,否则1号加油站永远都算到dp[1]是不包含此处加油的费用的,所以如果1号加油站加了油,则费用要当i=0时才会被计算到

{

dp[i]=INF;

for(j=i+1;j<=num;j++)//必须是正序因为下面的continue意思是在j点不需要加油,但是在这点之后一定至少有一点要加油,因为否则就会被上面的while循环筛掉

{

if((dis[j]-dis[i])/km_oil>oilbox)//连j点都到达不了

continue;

if((dis[j]-dis[i])/km_oil<oilbox/2&&(dis[j+1]-dis[i])/km_oil<=oilbox)//在j点油箱过半且可以到达下一站

continue;

temp=(dis[j]-dis[i])/km_oil*price[j];//j点要加油了

temp+=2;

temp+=dp[j];

if(temp<dp[i])

{

dp[i]=temp;

u=j;

}

}

Link[i][u]=1;

//record[++cnt]=u;

}

cnt=0;

for(i=0;i<num;)

{

for(j=i+1;j<=num;j++)

{

if(Link[i][j]==1)

{

i=j;

record[++cnt]=j;

break;

}

}

if(i!=j)//没有一个需要加油的,则直接跳出

break;

}

printf("%.2lf %d\n",dp[0]+cost,cnt);

for(i=1;i<=cnt;i++)

printf("%d ",record[i]);

printf("\n");

return 0;

}

网址:NOJ1149 旅游预算(动态规划) https://www.yuejiaxmz.com/news/view/477519

相关内容

旅游行程规划+费用预算
南京旅游花费:如何规划预算?
全面预算指南:八人四川旅游费用明细与预算规划
新加坡七日游,预算规划与旅行攻略
旅游预算(动态规划) noj 西工大算法
海南旅游攻略:预算规划与费用详解
新加坡旅游一星期,预算规划与旅行建议
全面预算指南:深度解析四川旅游花费与预算规划
泰国旅游:预算规划及大致花费分析
海南旅游全攻略:预算规划与必备tips

随便看看