zoukankan      html  css  js  c++  java
  • 杭电ACM1171题,几种解法,背包,母函数等

    最近看了背包九讲,就想找个题目练练手,到网上搜了一下,说杭电的这一题是多重背包问题,就去做了。没想到,这一题做的异常痛苦,到现在自己的答案还没有通过的。痛苦归痛苦,还是学到了很多的。

    题目大意:有N中物品,每种物品有价值和数目,把它们分成2部分。如何才能分的最均等?

    1、最简单的方法,这种方法开始自己就想到了,但是执着于背包,就没去用。后来看到别人的解法,才后悔自己为什么没有去试试呢。

      这个方法的思想就是,把所有的物品排序,然后按顺序添加进来,和总价值的一半比较。细节没想清楚,先占个位置。

    2、母函数,这个问题正好适用于母函数。顺便也学了一下母函数。

      母函数的大概思想:把相加问题,变成指数项的相乘问题。如有3枚硬币,分别是1、2、3面值的,求解组成各种面值的可能性。通过解方程(1+x^1)*(1+x^2)*(1+x^3)的结果得到每种面值的可能组合的个数。面值在指数项,而指数项前面的系数即为多少中组合。即若结果多项式中有2x^3,则面值为3的组合有2中。

          通过用母函数,这个问题就打打简化了,可以直接套模版。即第i件物品可以表示为(1+x^V(i)+x^(2*V(i))...),把所有物品相乘,最后得到的多项式中,系数不为0且指数项最接近总价值的一半的指数项即为解。

      自己的写的代码,出现了一个匪夷所思的错误,最后的c1[i]>0是错的,c1[i]!=0则对了,但是结果数组里面除了0就是正数呀,实在是想不通

    3、抽象为背包。这个是一开始我用的方法,把这个问题当成多重背包问题,每个物品的weight为1,但是最后没通过,现在都不知道是不是对的。不过有人做对了,唉。。

  • 相关阅读:
    使用git bash提交代码到github托管
    eclipse中将java项目变成web项目
    程序员的兼职网站
    python 文件内容修改替换操作
    简单介绍下python中函数的基础语法
    python lambda简单介绍
    微信小程序 --01
    微信小程序开发 --02
    弹性盒模型flex
    HTML基础
  • 原文地址:https://www.cnblogs.com/fanmingchun/p/4181325.html
Copyright © 2011-2022 走看看