信息学奥赛一本通python版 | 数字组合

学习Python从娃娃抓起!用python来完成信息学奥赛一本通网站的题目,记录每一个瞬间。

附上汇总贴:信息学奥赛一本通python版 | 汇总_热爱编程的通信人的博客-CSDN博客


【题目描述】

有n个正整数,找出其中和为t(t也是正整数)的可能的组合方式,如:

n=5,5个数分别为1,2,3,4,5,t=5;

那么可能的组合有5=1+4或5=2+3和5=5三种组合方式。

【输入】

输入的第一行是两个正整数n和t,用空格隔开,其中1≤n≤20,表示正整数的个数,t为要求的和(1≤t≤1000);

接下来的一行是n个正整数,用空格隔开。

【输出】

和为t的不同的组合方式的数目。

【输入样例】

5 5

1 2 3 4 5

【输出样例】

3

【代码详解】

n,t = [int(i) for i in input().split()]

a =[0]

dp = [0 for i in range(n+1)]
dp[0] = 1

ls = [a.append(int(i)) for i in input().split()]

for i in range(1, n+1):
    for j in range(t, a[i]-1, -1):
        dp[j] = dp[j] + dp[j - a[i]]

print(dp[t])

【运行结果】

5 5 
1 2 3 4 5
3

猜你喜欢

转载自blog.csdn.net/guolianggsta/article/details/130816523