zoukankan      html  css  js  c++  java
  • HDU1059 DP模板

    #include<stdio.h>
    int dp[120005];
    int V,v;
    void bag01(int c,int w)//01背包
    {
     for(v=V; v>=c; v--)
      if(dp[v]<dp[v-c]+w)
       dp[v]=dp[v-c]+w;
    }
    void bagall(int c,int w)//完全背包
    {
     for(v=c; v<=V; v++)
      if(dp[v]<dp[v-c]+w)
       dp[v]=dp[v-c]+w;
    }
    void mutibag(int c,int w,int p)//多重背包
    {
     if(c*p>=V)
      bagall(c,w);
     else
     {
      int k=1;
      while(k<p)
      {
       bag01(c*k,w*k);
       p=p-k;
       k=k+k;
      }
      bag01(c*p,w*p);
     }
    }
    int main()
    {
     int n[8];
     int i,sum,p=0;
     while(scanf("%d%d%d%d%d%d",&n[1],&n[2],&n[3],&n[4],&n[5],&n[6]),n[1]+n[2]+n[3]+n[4]+n[5]+n[6])
     {
      sum=n[1]+n[2]*2+n[3]*3+n[4]*4+n[5]*5+n[6]*6;  //sum为奇数个,那么肯定不能平分
      if(sum%2)
      {
       printf("Collection #%d: Can't be divided. ",++p);
       continue;
      }
      V=sum/2;
      for(i=0; i<=V; i++)
       dp[i]=0;
      for(i=1; i<=6; i++)
       mutibag(i,i,n[i]);
      if(dp[V]==V)
       printf("Collection #%d: Can be divided. ",++p);
      else
       printf("Collection #%d: Can't be divided. ",++p);
     }
     return 0;
    }

  • 相关阅读:
    kafka搭建
    kafaka学习笔记
    metastore 简单说明
    二 python并发编程之多进程-理论
    文件指针偏移量
    FTP
    1 并发编程
    操作系统简介
    1 网络编程
    网络编程-osi七层
  • 原文地址:https://www.cnblogs.com/Skyxj/p/3196942.html
Copyright © 2011-2022 走看看