hdu2844 Coins 多重背包

2015-07-24 05:53:13 · 作者: · 浏览: 4



#include 
  
   
#include 
   
     #include 
    
      #include 
     
       #include 
      
        #include 
       
         #include 
        
          #include 
          #define inf 0x3f3f3f3f #define ll __int64 using namespace std; int n,m,dp[100010],a[100010],c[1010]; void pack01(int cost,int w) { for(int i=m;i>=cost;i--) dp[i]=max(dp[i-cost]+w,dp[i]); } void packall(int cost,int w) { for(int i=cost;i<=m;i++) dp[i]=max(dp[i-cost]+w,dp[i]); } void multipack(int cost,int w,int cnt) { if(cost*cnt>=m)//体积乘以数量大于总体积,说明不能完全装完,相当于有无穷件,用完全背包 packall(cost,w); else //可以装完,用01背包 { int i=1; while(i