用 Python 写了个代码,对 DP 有少量修改: 初值:  dp[m][m] = 1 for m in 1,10,20,30,50,100 状态:  dp[m][k] = \sum_{i <= m} dp[i][k-m] for k in 1:n if k > m 结果:  N = sum_m dp[m][n] 代码: from sys import stdin N = int(stdin.readline()) C = [1, 10, 20, 30, 50, 100] C.sort() dp = dict([(c,[0]*(N+1)) for c in C]) for k in xrange(1,N+1): for c in C: if k == c: dp[c][c] = 1 elif k > c: dp[c][k] = sum([dp[i][k-c] for i in C if i <= c]) CS = sum([dp[c][N] for c in C]) print CS
点赞 1

相关推荐

大野鸡:其实就是量,但是时间有限,1000题只要不是全中等简单,简单中等困难1-2-1,大概能打打比赛了(前20%),10000题就是下一个灵神
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务