经典枚举 | 您所在的位置:网站首页 › 华南主板显示b9是什么意思 › 经典枚举 |
话不多说,先来看问题 【百钱百鸡】 中国数学家张邱建(公元五世纪,其它资料不详)在他的《算经》中提出了著名的“百钱买百鸡”问题:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一。百钱买百鸡,问翁、母、雏各几何? 你的任务:输出所有可行的方案。 输入格式无 输出格式输出共有若干行: 每行三个整数,相互之间用1个空格隔开,依次为公鸡、母鸡、小鸡的数量。 所有方案,第一优先级按公鸡的数量从小到大排列。 问题分析—— 把公鸡、母鸡和小鸡的数量分别设为cock,hen,chicken,百钱百鸡问题就可以转换成解不定方程组的问题。 因此 ,百钱百鸡问题可以根据三层循环的嵌套来实现:第一层控制公鸡的数量,第二层控制母鸡的数量,第三层控制小鸡的数量。 1.根据等式cock+hen+chiken = 100,推出3个循环的可控范围: 公鸡:0~100只 母鸡:0~100只 小鸡:0~100只 三重循环枚举101*101*101 = 1030301次 你以为这就完了?,NO! 这样三重循环有可能会超时! 我们还需要进一步优化 2.根据等式5*cock+3*hen+chicken/3 = 100 公鸡:0~20只 母鸡:0~34只 小鸡:0~100只(虽然百钱可以买三百只,但是题目要求只能买100只) 三重循环须要枚举21*34*101 = 72114次 还可以优化一下(^_−)☆ 3.进一步分析得到,小鸡的数量是三的整数倍,否则不可能刚好花一百块钱。因此,小鸡只需按照三的倍数枚举,即:for(chicken = 0 ; chicken |
CopyRight 2018-2019 实验室设备网 版权所有 |