zoukankan      html  css  js  c++  java
  • 多重背包的二进制优化

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int v[200005],s[200005],val[200005];
    int main()
    {
        int a[6]={1,2,3,4,5,6},b[10],k,sum,h,f,g=0;
        while(1)
        {
            memset(val,0,sizeof(val));
            memset(v,0,sizeof(v));
            memset(s,0,sizeof(s));
            g++;
            k=0;
            sum=0;
            for(int i=0;i<6;i++)
            {
                cin>>b[i];
                sum=sum+b[i]*a[i];
                if(b[i]==0)
                k++; 
            }
            if(k==6)
            break;
            printf("Collection #%d:
    ",g);
            if(sum%2!=0||k==5)
            {
                cout<<"Can't be divided."<<endl;
                cout<<endl;
                continue;
            }
            h=0;
            f=0;
            for(int i=0;i<6;i++)
            {
                if(b[i]==0)
                continue;
                for(int j=1;j<=b[i];j<<=1)
                {
                    v[h++]=j*a[i];
                    s[f++]=j*a[i];
                    b[i]=b[i]-j;
                }
                if(b[i]>0)
                {
                    v[h++]=b[i]*a[i];
                    s[f++]=b[i]*a[i];
                }
            }
            for(int i=0;i<h;i++)
                for(int j=sum/2;j>=s[i];j--)
                {
                    val[j]=max(val[j],val[j-s[i]]+v[i]);
                } 
                if(val[sum/2]==sum/2)
                {
                cout<<"Can be divided."<<endl;
                }
                else
                {
                cout<<"Can't be divided."<<endl;
                }
                cout<<endl;
        }
    }
  • 相关阅读:
    centos7&redhat7修改密码
    memcached安裝部署文檔
    cronolog安装部署文檔
    ftp安裝部署文檔
    cacti安裝部署文檔
    php安裝部署文檔
    MYSQL-5.5安装部署文档
    MySQL5.1安裝部署文檔
    nginx進階
    IO进程疏漏
  • 原文地址:https://www.cnblogs.com/Leozi/p/10835137.html
Copyright © 2011-2022 走看看