zoukankan      html  css  js  c++  java
  • 【POJ1742】Coins

    关于多重背包的一道题。

    首先看数据便知道朴素的多重背包无法通过,所以我们采用二进制拆分进行优化,(二进制优化点这里),这样就能顺利通过本题了。

    这道题只是判断可行性,所以“价值”这一状态并没有什么用。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <algorithm>
     5 using namespace std;
     6 bool dp[100010];
     7 int v[110];
     8 int save[10000];
     9 int main() {
    10     int n, m;
    11     while (scanf("%d%d", &n, &m) != EOF&&n&&m) {
    12         int i, j, k, len = 0;
    13         for (i = 1; i <= m; i++)
    14             dp[i] = false;
    15         for (i = 0; i < n; i++)
    16             scanf("%d", &v[i]);
    17         int num;
    18         for (i = 0; i < n; i++) {
    19             scanf("%d", &num);
    20             int q = 1;
    21             while (q < num) {
    22                 save[len++]=q*v[i];
    23                 num -= q;
    24                 q *= 2;
    25             }
    26             save[len++] = num*v[i];
    27         }
    28         dp[0] = true;
    29         for (i = 0; i < len; i++) {
    30             for (j = m; j >= save[i]; j--) {
    31                 if (!dp[j])
    32                     dp[j] = dp[j-save[i]];
    33             }
    34         }
    35         int cot = 0;
    36         for (i = 1; i <= m; i++) {
    37             if (dp[i])
    38                 cot++;
    39         }
    40         printf("%d
    ", cot);
    41     }
    42     return 0;
    43 }
    AC Code
  • 相关阅读:
    设计模式之中介者模式
    解释器模式(行为模式)
    进程池Pool
    Process子类
    multiprocessing
    random
    re
    time和datetime
    logging 日志
    hashlib
  • 原文地址:https://www.cnblogs.com/shl-blog/p/10661560.html
Copyright © 2011-2022 走看看