zoukankan      html  css  js  c++  java
  • NYOJ 546(分珠宝)

    #include<stdio.h>
    #include<string.h>
    #define maxn 100005
    int dp[maxn],a[maxn],w[maxn];
    int main()
    {
        int i,j,num,sum,t,cnt(1);
        while(~scanf("%d%d%d%d%d%d%d%d%d%d",&a[0],&a[1],&a[2],&a[3],&a[4],&a[5],&a[6],&a[7],&a[8],&a[9]))
        {
            memset(dp,0,sizeof(dp));
            memset(w,0,sizeof(w));
            sum=0;num=0;
            for(i=0;i<10;i++)
                sum=sum+(i+1)*a[i];//总价值 
            if(sum==0)
                break;//必要 ,因为全输入0并不是ctrl和C组合键 
            if(sum%2==1)
            {        
                printf("#%d:Can't be divided.\n\n",cnt++);
                continue;
            }
            sum=sum/2;
            for(i=0;i<10;i++)
            {
                if(a[i]==0)
                {
                    continue;
                }
                t=1;
                while(a[i]-t>0)/*二进制压缩为一般01背包,想想为什么不会是if语句*/
                {
                    w[num++]=t*(i+1);
                    a[i]=a[i]-t;
                    t=t*2;
                }
                w[num++]=a[i]*(i+1);
            }
            for(i=0;i<num;i++)
            {
                for(j=sum;j>=w[i];j--)
                {
                    if(dp[j]<dp[j-w[i]]+w[i])
                        dp[j]=dp[j-w[i]]+w[i];
                }
            }
            if(dp[sum]!=sum)
            {
                printf("#%d:Can't be divided.\n\n",cnt++);
            }
            else
            {
                printf("#%d:Can be divided.\n\n",cnt++);
            } 
        }
        return 0;
    }                           
    

      

  • 相关阅读:
    第4次作业得分-东师软工
    第3次作业得分-东师软工
    C语言-第3次作业得分
    NPM
    Node模块化
    spring源码解析前瞻
    单例DCL模式
    dubbo-admin安装
    linux 安装Zookeeper
    Tomcat在Linux上的安装与配置
  • 原文地址:https://www.cnblogs.com/hxsyl/p/2526266.html
Copyright © 2011-2022 走看看