zoukankan      html  css  js  c++  java
  • 发票问题

    太多发票了,直接遍历2^n复杂度,算不出,后来用贪心算法,排序后再选择逼近。


    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # __author__ = 'James'

    def PowerSetsBinary(items):
    N = len(items)
    for i in range(2 ** N):#子集的个数
    combo = []
    for j in range(N):#用来判断二进制数的下标为j的位置的数是否为1
    if (i >> j) % 2:
    combo.append(items[j])
    if(abs(sum(combo)-2661.66)< 0.2):
    print(combo)

    # items=[120, 168.49, 532]

    target = 2661.66

    items=[120, 168.49, 532, 14.56, 29.83, 2.82, 42.53, 288.80, 60.30, 57.68,
    122.67, 59.40, 30.04, 0.98, 28.80, 3.33, 296.80, 9.05, 81.62,
    37.04, 141.63, 61.38, 2.00, 1.04, 29.76, 3.01, 37.28, 60.10, 15.96,
    2.63, 2.37, 23.07, 60.19, 40.59, 21.78, 1.74, 41.25, 24.30, 143.69,
    22.68, 15.36, 14.40, 133.20, 0.76, 82.94, 11.54, 4.81, 29.06, 5.27]

    #PowerSetsBinary(items)

    bestsum=0
    n=len(items)

    def dfs(i, s):
    global bestsum, n
    if(i==n):
    bestsum=s
    return

    if( s+items[i]<=target and (s+sum(items[i:]))>=target):
    dfs(i+1, s+items[i])
    if((s+sum(items[i+1:]))>=target):
    dfs(i+1, s)

    dfs(0, 0)

    print("testsum %d" % bestsum)

    backup = items
    items= sorted(backup, reverse=True)

    print(sum(items))
    print(items)
    def tanxin():
    global bestsum
    temp=[]
    for i in items:
    if (bestsum + i) <=target:
    bestsum+=i
    temp.append(i)
    print(temp)
    print(backup)
    for j, val in enumerate(backup):
    for i in temp:
    if(i==val):
    print(i)
    tanxin()
    print(bestsum)

  • 相关阅读:
    URL的JavaScript解决之道
    JavaScript中Date对象的几个扩展方法
    taobao open
    Linux操作系统的日志说明
    DG常用运维命令及常见问题解决
    oracle系统视图
    oracle 自动备份、恢复功能
    oracle队列
    spring学习笔记
    sql语句拾遗
  • 原文地址:https://www.cnblogs.com/cute/p/11679010.html
Copyright © 2011-2022 走看看