UVA10590 Boxes of Chocolates Again(完全背包,python大数)

Posted live4m

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVA10590 Boxes of Chocolates Again(完全背包,python大数)相关的知识,希望对你有一定的参考价值。

题意:

求将n分成若干个正整数的本质不同的方案数.

n<=5e3

解法:

为了防止重复计数,考虑让拆出的数有序.

解法1:
d[i][j]表示要组成i,选择的数字必须<=j的方案数.
转移:
如果不拆出j,那么方案数d[i][j-1]
如果拆出j,那么方案数位d[i-j][j]

解法2:
完全背包,问题抽象为有无限个[1,n]可以取,
组成n的方案数,
只需要从小到大枚举物品进行背包转移即可,这样正好做到了拆出的数字有序.


ps:
由于这题需要大数,解法1似乎会超内存(RE了),
代码是解法2.

code:

maxm=5005

d=[0 for i in range(maxm)]

def init():
    d[0]=1
    for j in range(1,maxm): #从小到大枚举数字,等价于从小到大取
        for i in range(j,maxm): #完全背包
            d[i]+=d[i-j]
            
init()

while True:
    try:
        n=int(input())
        print(d[n])
    except:
        break

以上是关于UVA10590 Boxes of Chocolates Again(完全背包,python大数)的主要内容,如果未能解决你的问题,请参考以下文章

UVA11003 Boxes0-1背包

uva103 - Stacking Boxes(DAG)

Uva12657 (Boxes in a Line)移动盒子

UVa 12525 Boxes and Stones (dp 博弈)

UVA 12657 Boxes in a Line

uva103-Stacking_Boxes