编程介的小学生 2019-09-09 20:02 采纳率: 20.5%
浏览 168

贪心的孩子 怎么运用C语言来实现

Problem Description
“想不出来”是一个贪心的孩子,他天天想着怎么让自己变的有钱,有一天他想到去做生意,他想用自己身上唯一的n元钱去买a物品,再用a物品按一定的比例换b物品。。。。。最后再把东西卖了。
比如Sample里的数据,想不出来先用10000买了12000个1物品,再用1物品换到了15600个2物品,再将2物品卖了得到21840元钱。
可是,想不出来不知道怎样才可以得到最多的钱,所以他请你来帮帮他。(任务物品可以分割为很细小的一块,同时,每个物品或钱最多只能进行一次买卖,特别请注意:一旦将物品转换为钱,则交易就结束了)

Input
每组数据第一行输入一个n(n <= 10000)(表示想不出来一开始有的钱数)和一个m(m <= 10000)(表示接下来有m组兑换关系)
接下来有m组数据a , b , c。
0<= a, b <= 1000000, 0 <= c <= 2;
输入过程中当a或b为0时表示为钱;
注意:输入中没给出的兑换关系表示不能兑换,兑换过程中物品都将全部兑换,兑换过程中不会出现循环。

Output
输出想不出来最后最多的钱数。(保留2位有效数字)(最后结果中不会超过2^31 - 1)。

Sample Input
10000 3
0 1 1.2
1 2 1.3
2 0 1.4

Sample Output
21840.00

  • 写回答

2条回答 默认 最新

  • qq_33213371 2019-09-10 17:12
    关注

    这个应该可以简化为矩阵吧,例如:
    a b c
    a 0 0 1
    b 0 0 1
    c 1 1 0
    矩阵表示倍数,例如开局从a行开始选,a换c就是1倍,a不能换a,所以默认为0(你也可以自己定),然后如果选定a换c,则a列全变0,
    下一次从c行开始选,然后最后钱数不过就是基础钱数和几个倍数相乘
    然后就是最优算法的问题了,怎么倍数最大,可以参考Dijkstra算法,如果计算量不大,完全可以遍历,不过我记得Dijkstra算法得出的不一定是最优路径,你可以找找其他算法或者遍历所有,不过矩阵化处理肯定要弄的

    评论

报告相同问题?

悬赏问题

  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建