• poj 1276 Cash Machine 多重背包


    #include<stdio.h>
    #include<string.h>
    #include<string>
    #include<algorithm>
    using namespace std;
    
    int dp[100000+5],N;
    
    void zeroonepack(int cost,int weight)
    {
        for(int i=N;i>=cost;i--)
            dp[i]=max(dp[i],dp[i-cost]+weight);
    }
    
    void completepack(int cost,int weight)
    {
        for(int i=cost;i<=N;i++)
            dp[i]=max(dp[i],dp[i-cost]+weight);
    }
    
    void multiplepack(int cost,int weight,int amount)
    {
        if(amount*cost>=N)
            completepack(cost,weight);
        else
        {
            int k=1;
            while(k<amount)
            {
                zeroonepack(cost*k,weight*k);
                amount-=k;
                k*=2;
            }
            zeroonepack(cost*amount,weight*amount);
        }
    }
    
    int main()
    {
        int i,n,a[10],b[10];
        while(~scanf("%d%d",&N,&n))
        {
            memset(dp,0,sizeof(dp));
            for(i=0;i<n;i++)
                scanf("%d%d",&a[i],&b[i]);
            for(i=0;i<n;i++)
                multiplepack(b[i],b[i],a[i]);
            printf("%d
    ",dp[N]);
        }
        return 0;
    }

    版权声明:本文为博主原创文章,未经博主允许不得转载。http://xiang578.top/

  • 相关阅读:
    用java在mysql中随机插入9000 000条数据
    java连接mysql的一个小例子
    JDK环境变量配置
    JVM工作原理
    线程和进程的区别
    java实现链表
    内连接、外连接、左连接、右连接
    udp协议
    要看的东西
    eclipse快捷键
  • 原文地址:https://www.cnblogs.com/xryz/p/4847849.html
Copyright © 2020-2023  润新知