c++ 旅行家的预算

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

《家庭旅行预算管理》- 教你如何规划旅行预算,让家庭旅行不超出预期。 #生活知识# #家庭生活# #家庭旅行建议# #家庭旅行目的地推荐书目#

最新推荐文章于 2024-10-01 13:14:23 发布

lld951027 于 2018-11-15 14:15:58 发布

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

空闲时间仍然做些题活动下脑筋,偶遇这题,感觉挺有意思的,难度不大,但真的实实在在的体现了贪心算法的核心价值观hhhh.......总的来说,就是在当下不断循环去寻找最近的最好的解,有好的解,就直接跳过去,没有的话就认为当下是最好的,然后往下走一步算一步~

题目链接

#include<iostream>

#include<cmath>

#include<iomanip>

using namespace std;

int main(int argc, char const *argv[])

{

double D1,C,D2,P;

int N;

cin>>D1>>C>>D2>>P>>N;

double* DD=new double[N+2];

double* PP=new double[N+2];

DD[0]=0;

PP[0]=P;

double max=C*D2;

for(int i=1;i<N+1;++i){

cin>>DD[i]>>PP[i];

}

for(int i=1;i<N+2;++i){

if(DD[i]-DD[i-1]>max){

cout<<"No Solution"<<endl;

return 0;

}

}

DD[N+1]=D1;

PP[N+1]=0;

int now=0;

double nowC=0;

double ret=0;

while(now<N+1){

int nearMinI=now;

double nearMin=PP[now];

for(int i=now+1;i<N+2;++i){

if(DD[i]-DD[now]>max){

break;

}

if(PP[i]<nearMin){

nearMin=PP[i];

nearMinI=i;

break;

}

}

if(nearMinI==now){

double needC=(D1-DD[now])/D2;

if(needC>C){

needC=C;

}

ret+=(needC-nowC)*PP[now];

nowC= needC- (DD[now+1]-DD[now])/D2;

++now;

}

else{

double needC=(DD[nearMinI]-DD[now])/D2;

if(needC>nowC){

ret+=(needC-nowC)*PP[now];

nowC=0;

}

else{

nowC-=needC;

}

now=nearMinI;

}

}

cout<<fixed<<setprecision(2)<<ret<<endl;

return 0;

}

网址:c++ 旅行家的预算 https://www.yuejiaxmz.com/news/view/477517

相关内容

旅行预算
泰国预算旅行:旅行者的完整指南
简易旅行预算表
12 个预算旅行窍门
旅行组团预算方案.docx
旅行预算开支计划书
云南旅游预算指南:详细分析旅行费用,帮助您规划合理的旅行预算
美国旅行一个月的合理预算
旅游预算怎么制定(如何做旅游预算)
用c语言实现旅行商问题的c

随便看看