用3,5,7,8用几个数字按要求组数数,一选两个数字组成最小的两位数是几和几?

从4、5、8、0这四个数字卡片中任意選出两张组成一个两位数,分别满足下面条件(写一个即可)
是3的倍数()既是2又是5的倍数()
3的倍数(45)既是2又是5的倍数(40)
是3的倍数(45)既是2又是5的倍数(50)
}


前面那个代码有点错误会丢包,现在改出来了通过了例子
考虑到你的找的数字只有21个,因为怕数组溢出我包的容量尽可能缩小了你想改大的话可以把包的select量拿出来,我就贪方便了直接写结构体里面了
思想就是01背包这种选物品的问题都是可以转成背包问题解决的,千万不要用枚举即使是把尾数拆開来算总和的枚举也是一定会溢出的,数据量太大了而且时间会很慢(指数时间复杂度)
我这个代码时间复杂度是0(C*P*N),(C是选择的元素P是總和,N是元素个数)空间复杂度是O(C*C*P)
在我的机子跑了79S吧,其实很慢了因为我的包的总量是按照P来划分的,但是P很大如果你想快的话可以這样,因为你的数据都是比较大的可以考虑划分为一个一个segement,比如1W-2W是一个区域这样把包的容量减少,这样跑起来就快了
如果你的给定數字少的话(比如只有40个)那就直接用超大背包的做法,把数字拆分枚举再用完全背包,然后合并
}

我要回帖

更多关于 用几个数字按要求组数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信