zoukankan      html  css  js  c++  java
  • hdu_2844_Coins(多重背包)

    题目连接:hdu_2844_Coins

    题意:给你n个硬币的价值和对应的数量,问你从1到m有那些数能组合出来

    题解:如果我们将硬币的价值看成一个物品的容量和价值,那么对应1-m,如果dp[i]==i,那么这个数就能组合出来,所以这题就变成了一个多重背包,多重背包可以分为完全和01背包,也可以直接用01背包做,分两种情况的速度要快一些,只用01背包的速度要慢一些,不过还是可以AC的

     1 #include<cstdio>
     2 #include<cstring>
     3 #define F(i,a,b) for(int i=a;i<=b;i++)
     4 inline void up(int &x,int y){if(x<y)x=y;}
     5 
     6 int n,m,x,y,a[111],b[111],bag[10001],ed,dp[100010];
     7 
     8 int main(){
     9     while(~scanf("%d%d",&n,&m),n+m){
    10         ed=0;
    11         F(i,1,n)scanf("%d",a+i);
    12         F(i,1,n)scanf("%d",b+i);
    13         F(i,1,n){
    14             int x=a[i],y=b[i];
    15             F(j,0,10){
    16                 if((1<<j)>y)break;
    17                 bag[++ed]=x*(1<<j);
    18                 y-=(1<<j);
    19             }
    20             if(y>0)bag[++ed]=y*x;
    21         }
    22         memset(dp,0,sizeof(dp));
    23         F(i,1,ed)for(int j=m;j>=bag[i];j--)up(dp[j],dp[j-bag[i]]+bag[i]);
    24         int ans=0;
    25         F(i,1,m)if(dp[i]==i)ans++;
    26         printf("%d
    ",ans);
    27         
    28     }
    29     return 0;
    30 }
    View Code
  • 相关阅读:
    CSS美化自己的完美网页
    HTML基础做出属于自己的完美网页
    前端基础知识
    ajax应用篇
    mysql的介绍和安装
    MYSQL系列之(二)
    TP框架控制器的空操作
    Thinkphp框架基础
    PHP之Smarty模板引擎
    App 开发:Hybrid 架构下的 HTML5 应用加速方案
  • 原文地址:https://www.cnblogs.com/bin-gege/p/5696086.html
Copyright © 2011-2022 走看看