zoukankan      html  css  js  c++  java
  • 背包问题

    #==============================================================================
    # def mybag(n,c,z,v):
    #     w = [[0 for i in range(c+1)] for j in range(n+1)]
    #     for i in range(n-1,-1,-1):
    #         for j in range(1,c+1):
    #             if j >= z[i] and w[i+1][j] < w[i+1][j-z[i]] + v[i]:
    #                 w[i][j] = w[i+1][j-z[i]] + v[i];
    #                 print w
    #             else:
    #                 w[i][j] = w[i+1][j]
    #                 
    #     return w
    # 
    # def asswer(m,n,c,w):
    #     x1 = []
    #     j = c
    #     for i in range(n):
    #         if m[i][j] == m[i+1][j]:
    #             x1.append(0)
    #         else:
    #             x1.append(1)
    #             j = j - w[i]
    #     return x1
    # 
    # 
    # 
    # 
    # 
    # n = 5;
    # c = 10
    # w = [2,2,6,5,4]
    #==============================================================================
    #v = [6,3,5,4,6]
    #res = mybag(n,c,w,v)
    #x = asswer(res,n,c,w)
    
    #sum_time,num_medic = raw_input().split(' ')
    #sum_time = int(sum_time)
    #num_medic = int(num_medic)
    #time_list = []
    #values_list =[]
    #for i in range(num_medic):
    #    time,value = raw_input().split(' ')
    #    time_list.append(int(time))
    #    values_list.append(int(value))
    ##==============================================================================
    #def bag_medic(sum_time,num_medic,time_list,values_list):
    #    w = [[0 for j in range(sum_time+1)] for i in range(num_medic+1)]
    #    for i in range(num_medic-1,-1,-1):
    #        for j in range(1,sum_time + 1):
    #            if j >= time_list[i] and w[i + 1][j] < w[i + 1][j-time_list[i]] + values_list[i]:
    #                w[i][j] = w[i + 1][j-time_list[i]] + values_list[i]
    #            else:
    #                w[i][j] = w[i+1][j]
    #            
    #    return w
    #    
    #def find_answer(res,sum_time,num_medic,time_list):
    #    j = sum_time
    #    x1 = []
    #    for i in range(num_medic):
    #        if res[i][j] == res[i+1][j]:
    #            x1.append(0)
    #        else:
    #            x1.append(1)
    #            j = j - time_list[i]
    #    return x1
    #def maxValue(x1,values_list):
    #    max_value = 0
    #    for i in range(len(x1)):
    #        max_value += x1[i] * values_list[i]
    #    print max_value
    ##==============================================================================
    #    
    #res = bag_medic(sum_time,num_medic,time_list,values_list)
    #x1 = find_answer(res,sum_time,num_medic,time_list)
    #maxValue(x1,values_list)
    
    def bag2(goods_num,bag_weight,values,goods_weight):
        f = [[0 for j in range(bag_weight + 1)] for i in range(goods_num + 1)]
        flag = [[0 for j in range(bag_weight + 1)] for i in range(goods_num + 1)];
        for i in range(1,bag_weight + 1):
            f[1][i] = int(i/goods_weight[0]) * values[0]
            if i < goods_weight[0]:
                flag[1][i] = 0
            else:
                flag[1][i] = 1    
        for k in range(2,goods_num + 1):
            for y in range(1,bag_weight + 1):
                if y >= goods_weight[k-1] and f[k-1][y] <= f[k][y - goods_weight[k-1]] + values[k-1]:
                    f[k][y] = f[k][y - goods_weight[k-1]] + values[k-1]
                    flag[k][y] = k
    
                else:
                    f[k][y] = f[k-1][y]
                    flag[k][y] = flag[k-1][y]
        return f,flag
    
    def find_answer(flag,goods_num,bag_weight,goods_weight):
        j = bag_weight
        x1 = []
        for i in range(goods_num,0,-1):
            if flag[i][j] == i:
                x1.append(1)
                j = j - goods_weight[i-1]
            else:
                x1.append(0)    
        x1.reverse()
        return x1
    
    
    goods_num = 4
    bag_weight = 10
    values = [1,3,5,9]
    goods_weight = [2,3,4,7]
    res,flag = bag2(goods_num,bag_weight,values,goods_weight)
    x1 = find_answer(flag,goods_num,bag_weight,goods_weight)
  • 相关阅读:
    适配器模式
    自己DIY word2010脚注和尾注没有的格式
    Linux单网卡,双IP,双网关配置,并搭建squid proxy上网
    about using gnuplot
    ReadDirectoryChangesW 函数 流沙
    Jquery easyui 异步树 流沙
    Overlapped I/O 学习 流沙
    jQuery.get(url,[data],[callback]) 流沙
    MsgWaitForMultipleObjectsEx用法 流沙
    Oracle smon_scn_time 表 说明
  • 原文地址:https://www.cnblogs.com/Kermit-Li/p/5715210.html
Copyright © 2011-2022 走看看