zoukankan      html  css  js  c++  java
  • HDOJ 1171 生成函数

    链接:

    http://acm.hdu.edu.cn/showproblem.php?pid=1171

    题意:

    和多重背包一样的意思,划分成两堆,使差最小

    题解:

    这道题当然可以用完全背包写啊,但也是可以用生成函数的,不过要注意的是输入结束是n<0 而不是 n==-1

    代码:

    31 int n;
    32 int v[50], m[50];
    33 int a[MAXN], b[MAXN], last;
    34 
    35 int main() {
    36     while (cin >> n, n >= 0) {
    37         rep(i, 0, n) scanf("%d%d", v + i, m + i);
    38         a[0] = 1;
    39         last = 0;
    40         rep(i, 0, n) {
    41             int last2 = last + m[i] * v[i];
    42             memset(b, 0, sizeof(b));
    43             rep(j, 0, m[i] + 1) rep(k, 0, last + 1)
    44                 b[k + j*v[i]] += a[k];
    45             memcpy(a, b, sizeof(b));
    46             last = last2;
    47         }
    48         per(i, 0, last / 2 + 1) if (a[i]) {
    49             printf("%d %d
    ", last - i, i);
    50             break;
    51         }
    52     }
    53     return 0;
    54 }
  • 相关阅读:
    有关乞讨的人
    雪之国
    Direction
    Qt表格
    单例模式
    工作
    Qt模型model、视图view、代理
    Qt数据库sqlite
    QDateTime
    跨工程传输数据
  • 原文地址:https://www.cnblogs.com/baocong/p/6835888.html
Copyright © 2011-2022 走看看