zoukankan      html  css  js  c++  java
  • HDU 2844 Coins【多重背包】

    大意:

    有n种物品

    告诉你每种物品的价值和数量

    问你能拼凑出1--m之内的多少个数

    分析:

    多重背包

    代码:

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 using namespace std;
     5 
     6 const int maxn = 100005;
     7 int dp[maxn];
     8 int num[maxn], va[maxn];
     9 int vo[maxn];
    10 int n, m;
    11 int tot;
    12 
    13 int solve() {
    14     int cnt = 0;
    15     memset(dp, 0, sizeof(dp));
    16     for(int i = 1; i < tot; i++) {
    17         for(int j = m; j >= vo[i]; j--) {
    18             dp[j] = max(dp[j], dp[j - vo[i]] + vo[i]);
    19         }
    20     }
    21     for(int i = 1; i <= m; i++) {
    22         if(dp[i] == i) cnt++;
    23     }
    24     return cnt;
    25 }
    26 
    27 int main() {
    28     while(scanf("%d %d",&n, &m) && ( n + m ) ) {
    29         for(int i = 1; i <= n; i++) {
    30             scanf("%d",&va[i]);
    31         }
    32         for(int i = 1; i <= n; i++) {
    33             scanf("%d",&num[i]);
    34         }
    35         tot = 1;
    36         for(int i = 1; i <= n; i++) {
    37             for(int k = 1; k <= num[i]; k *= 2) {
    38                 vo[tot++] = k * va[i];
    39                 num[i] -= k;
    40             }
    41             if(num[i]) vo[tot++] = num[i] * va[i];
    42         }
    43         printf("%d
    ",solve());
    44     }
    45     return 0;
    46 }
    View Code
  • 相关阅读:
    HDU 4870 Rating(高斯消元 )
    iOS开发者账号详细介绍
    iOS之Block
    CocoaPods 安装和使用
    搭建自己的局域网服务器
    MarkDown语法收集
    正则表达式参考表
    iOS企业级应用打包与部署
    iOS开发之代码加载方式进入APP的界面
    shell脚本小Demo
  • 原文地址:https://www.cnblogs.com/zhanzhao/p/3942757.html
Copyright © 2011-2022 走看看