今天退步了,变成了第八名
T1:我不知道我为什么不想写(不会),感觉是迪杰斯特拉
某个人X 直接给另一个人Y 转账后,假如Y 收到了亡元钱,手续费为:% ,那么X 花费了亡/( 1 一:% )元钱。假如X 和Y 之间可以直接转账且手续费为:%的话,我们连接一条边并赋权值为l / ( 1 一:% )。为了计算A 最少需要花费多少钱,我们需要找到一条路,使得B 到A 走过的路的权值乘积最小。由于权值都是大于1 的数(总是越乘越大),因此我们可以用Dijks 七ra 算法。至于权值乘积最小为什么也能用最短路算法,这可以用Dijkstra 算法的原理来解释,这里不再叙述。
T2:01背包 看下一篇题解
T3:不会,后面才知道:
题目描述不复杂,但是看起来很繁琐。因此,本题很考察选手的细心程度。由于规模很小,本题也不需要什么高级数据结构,只需要按照题意操作即可。
对于具体的实现方式,各人有不同的方法。每次有新的定义时直接计算该单元格的值是错误的,因为sum 和avg 的单元格必须随时更新(题目说明了这样的单元格必须恒等于要求的数值和或平均数)。我的方法是,每次有新的单元格被定义后,递归地计算出每个格子的值;如果计算过程中遇到某个由sum 或avg 定义的单元格,递归地调用它。储存下已经计算出的格子的值(相当于记忆化搜索)可以防止重复运算,提高效率。由于不会出现循环定义,因此该递归过程总有结束的时候。
T4:应该是提高组的题目,感觉还挺难,但是经过一番思考,原来只是暴力
首先我们将x 分解质因数
比如100=2^2*5^2
然后我们用a 数组装下这些质数的次方
第一的答案tot既为 a 数组的和 既2+2=4
第二个答案用排列组合
用tot的阶乘除(a[i]!*…a[m](a[i]<>0) 的阶乘)
也就是4!/(2!*2!)
既为第二个答案
同时注意将1至20的阶乘全部求出来,方便直接调用。
努力