求助大佬们一个问题。
算法吧
全部回复
仅看楼主
level 2
____京京 楼主
最近有个朋友向我提了一个问题,问我能不能用程序解决公交卡完美刷零,也就是在已知卡内余额和票价的情况下,用程序给出一种刷卡方案,使得卡内余额刚好为0,现在已知本市公交票价有以下几种规格:
公交:0.9,1.8;
地铁:1.8,2.7,3.6,4.5,5.4,6.3;
有轨电车:1.9,2.85,3.8;
充值规则是:只能充10元的倍数,最低10元,最高1000元,一张公交卡可以在以上三种公共交通中通用。
限定条件是,刷卡次数要尽可能少,同时还要考虑票价权重的问题,比如乘坐2.7-4.5元档地铁和1.8元档公交的人最多,那么这几种票价的权重就最高,应该优先考虑,0.9元公交次之,1.8、5.4和6.3元地铁的权重再次之,有轨电车权重最低。
目前我没有一点思路,不知道大佬们有没有遇到过类似的需求,是怎么解决的?
2023年03月14日 13点03分 1
level 8
权重不太理解。用随机数或优先从其开始实验吗?
如果找到了10的整数倍组合。那么可以当做一种基础组使用。
假定母料是10
向下取整(10/1.8)=5-》1.8的最大数量。
优先就是
1.8的有5个,
0.9的有
向下取整(10-1.8*5)/0.9个...

递归。
产生一些10内的组合。
同时又有剩余值。
2023年03月20日 05点03分 2
剩余值可以用来再次组合,直到得到10.此时总组是10的倍数。
2023年03月20日 05点03分
level 8
记得整数规划用的是动态规划,需要整数。比如最小单位是分。
计算的内容首先是任意数字组合与可能达到的值。
比如0.9是1.8的1/2表示时是90和180。
而360这个组合只保留一次,可能90*4,也可能是180*2,也可能是180+90*2。反正只要一个。
2023年03月20日 05点03分 3
level 8
权重可以是对产生组合的权重计算。就是再算一套权重。只用来挑选结果,或在计算中优先对结果倾向的。
比如递归时,按权重对待选排序。
180,0.9,…6.x
最后才轮到电车。
本层尝试过的,子层不能再试。所以子层拿到的是本层之后的。
本层0.9,子层从0.9后面…开始选。
2023年03月20日 05点03分 4
1