和为定值的多个数

一、题目

输入:数组如:[1,2,4,8,16,32,64], 和一个固定数字100;

输出:选出数组中和为100的几个数的位置。如对于此例子,输出:3, 6, 7。因为4+32+64=100

#coding=utf-8
import sys
def bag(n,m,w,v):
    res = [[0 for j in range(m+1)]for i in range(n+1)] #n+1 行,m+1列 值为0的矩阵
    for i in range(1,n+1):
        for j in range(1,m+1):
            res[i][j] = res[i-1][j] #0->res[0][1]->res[1][1]
            if j>=w[i-1] and res[i][j]<res[i-1][j-w[i-1]]+v[i-1]:#如果res[i-1][j]小于res[i-1][j-w[i-1]]+v[i-1],那么res[i][j]就等于res[i-1][j],否则就等于res[i-1][j-w[i-1]]+v[i-1]
                res[i][j] = res[i-1][j-w[i-1]]+v[i-1]
    return res
def show(n,m,w,res):
    x = [False for i in range(n)]
    j = m
    for  i in range(n,0,-1):
        if res[i][j]!=res[i-1][j]:
            x[i-1] = True
            j-=w[i-1]
    print(sum(x))
    for i in range(n):
        if x[i]:
            print (i+1)
if __name__ == "__main__":
    # 读取第一行的n
    n = int(sys.stdin.readline().strip())
    values = []
    for i in range(n):
        # 读取每一行
        line = sys.stdin.readline().strip()
        # 把每一行的数字分隔后转化成int列表
        values.append(int(line))
    #n=7
	m=100
	#w=[1,2,4,8,16,32,64]
	#v=[1,2,4,8,16,32,64]
	res = bag(n,m,values,values)
	#print (res)
	show(n,m,values,res)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值