zoukankan      html  css  js  c++  java
  • HDU

    题意

    给n个币的价值和其数量,问能组合成(1-m)中多少个不同的值。

    分析

    (c[i]*a[i]>=m)的币,相当于完全背包;(c[i]*a[i]<m)的币则是多重背包,考虑用二进制优化解决。最后扫一遍(dp[i])统计答案。

    import java.util.*;
    import java.math.*;
    
    public class Main{
        static int MAXN = 100005;
        static int []dp =  new int[MAXN];
        static int []a = new int [MAXN];
        static int []c = new int [MAXN];
        static int n,m;
        static void zero(int w,int v) {
            for(int i=m;i>=w;--i) {
                dp[i] = Math.max(dp[i], dp[i-w]+v);
            }
        }
    
        static void complete(int w,int v) {
            for(int i=w;i<=m;++i) {
                dp[i] = Math.max(dp[i], dp[i-w]+v);
            }
        }
    
        static void multiple(int w,int v,int c) {
            if(c * w >= m) {
                complete(w,v);
                return;
            }
            int k = 1;
            while(k<=c) {
                zero(k*w,k*v);
                c -= k;
                k <<= 1;
            }
            zero(c*w,c*v);
        }
    
        public static void main(String []args) {
            Scanner cin =  new Scanner (System.in);
            while(cin.hasNext()) {
                n = cin.nextInt();
                m = cin.nextInt();
                if(n==0 && m==0) break;
                for(int i=0;i<=m;++i) dp[i]=-1;
                dp[0] = 0;
    
                for(int i=1;i<=n;++i) {
                    a[i] = cin.nextInt();
                }
                for(int i=1;i<=n;++i) {
                    c[i] = cin.nextInt();
                    multiple(a[i],a[i],c[i]);
                }
                int res=0;
                for(int i=1;i<=m;++i) {
                    if(dp[i]==i) {
                        res++;
                    }
                }
                System.out.println(res);
            }
            cin.close();
        }
    }
    
  • 相关阅读:
    右键点击属性截图不了
    win7再分配磁盘新加卷
    oracle逻辑存储结构
    ORACLE spool打印
    oracle实例状态
    基于SCN增量恢复DG同步
    delete误删数据使用SCN恢复
    DG中模拟failover故障与恢复
    NFS挂载遇到的问题
    关于“身为父母”
  • 原文地址:https://www.cnblogs.com/xiuwenli/p/9827669.html
Copyright © 2011-2022 走看看