zoukankan      html  css  js  c++  java
  • HDOJ(HDU).2844 Coins (DP 多重背包+二进制优化)

    HDOJ(HDU).2844 Coins (DP 多重背包+二进制优化)

    题意分析

    先把每种硬币按照二进制拆分好,然后做01背包即可。需要注意的是本题只需要求解可以凑出几种金钱的价格,而不需要输出种数。因此用0表示不可以,1表示可以。最后对dp数组扫描一遍即可。

    代码总览

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #define nmax 100000
    #define nn 105
    #define INIT(x,y) memset(x,y,sizeof(x))
    using namespace std;
    int a[nn],c[nn];
    int pri[nmax],num[nmax],dp[nmax];
    int main()
    {
        //freopen("in.txt","r",stdin);
        int n,m;
        while(scanf("%d%d",&n,&m) && n){
            INIT(dp,0);
            INIT(a,0);INIT(c,0); INIT(pri,0);INIT(num,0);
            for(int i = 1; i<=n;++i) scanf("%d",&a[i]);
            for(int i = 1; i<=n;++i) scanf("%d",&c[i]);
            int cnt = 0;
            for(int k =1 ;k<=n ;++k){
                for(int i =1; i<=c[k];i*=2){
                    pri[cnt] = i * a[k];
                    num[cnt++] = i * 1;
                    c[k]-=i;
                }
                if(c[k]>0){
                    pri[cnt] = c[k] * a[k];
                    num[cnt++] = c[k];
                }
            }
            dp[0] = 1;
            for(int i = 0; i<=cnt;++i){
                for(int j = m; j>=pri[i]; --j){
                    //dp[j] = max(dp[j],dp[j-pri[i]]+1);
                    if(dp[j-pri[i]]) dp[j]  =1;
                }
    //            for(int i =0;i<=m;++i) printf(" %3d",dp[i]);
    //            printf("
    ");
            }
    //        for(int i =1;i<=m;++i) printf(" %3d",i);
    //        printf("
    ");
    //
    //        printf("%d
    ");
            int ans = 0;
            for(int i = 1;i<=m;++i)
                if(dp[i] == 1) ans++;
            printf("%d
    ",ans);
    
        }
        return 0;
    }
  • 相关阅读:
    spring注解方式AOP
    struts2 值栈的理解
    JAVA自定义注解
    JS学习随笔。
    使用Jsoup解析html网页
    Struts迭代器(iterator)遍历List常用的4种例子
    Maven 结合 Spring profile对不同的部署环境打包部署
    打印插件LODOP使用介绍
    Linux下查看CPU信息、机器型号等硬件信息
    验证码的生成和验证
  • 原文地址:https://www.cnblogs.com/pengwill/p/7367143.html
Copyright © 2011-2022 走看看