zoukankan      html  css  js  c++  java
  • 装载问题加强版

    /*
    1328.装载问题加强版
    时限:1000ms 内存限制:10000K  总时限:3000ms
    描述
    现在码头有一批重量不同的货物,有三艘装载量不同的货船,试求出能否一次将货物装完




    输入
    第一行给出货物的数量n(n<=10)
    第二行有n个整数,分别表示这n个货物的重量
    第三行有3个整数,分别表示三艘货船的载重量




    输出
    若能够一次装完输出Yes,否则输出No




    输入样例
    4
    1 2 3 4
    2 3 5




    输出样例
    Yes
    BY yuan
    2014.6.19
    At nwpu.xf
    */
    #include<stdio.h>
    #include<iostream>
    using namespace std;
    int a[10];
    int b[10];
    bool mark[10];
    bool flag[10];
    int w1,w2,w3;
    int n,j;
    int num=0;
    int sum1=0,sum2=0;
    int csum1=0,csum2=0;
    void backtrack1(int k)
    {


        if(k>=n){
           if(sum1>csum1&&sum1<=w1){
               for(int i=0;i<n;i++)
                  flag[i]=mark[i];
              csum1=sum1;}
              return;}
        sum1+=a[k];
        mark[k]=1;
        backtrack1(k+1);
        sum1-=a[k];mark[k]=0;
        backtrack1(k+1);
    }


    void backtrack2(int k)
    {
        if(k>=j){
           if(sum2>csum2&&sum2<=w2)
              csum2=sum2;
              return;}
        sum2+=b[k];
        backtrack2(k+1);
        sum2-=b[k];
        backtrack2(k+1);
    }


    void sort()
    {int temp;
        if(w1>w2)
           {temp=w1;
           w1=w2;
           w2=temp;
           }
        if(w2>w3)
        {
            temp=w2;
            w2=w3;
            w3=temp;
        }
        if(w1>w2)
        {
            temp=w1;
            w1=w2;
            w2=temp;
        }
    }
    int main()
    {int k=0,i;
        scanf("%d",&n);
        for(i=0;i<n;i++)
           {cin>>a[i];
            mark[i]=0;
           flag[i]=0;
           num=num+a[i];}
        cin>>w1;cin>>w2;cin>>w3;
        sort();
        backtrack1(0);
        for(i=0;i<n;i++)
           if(flag[i]==0)
              b[j++]=a[i];
        backtrack2(0);
        if(num-csum1-csum2<=w3)
          cout<<"Yes"<<endl;
        else
          cout<<"No"<<endl;
          return 0;
    }










    
    



  • 相关阅读:
    select应用于read函数 超时非阻塞方式
    取文本索引所执向的值(简单)
    linux c函数指针的应用
    解决vsftp无法启动问题(转)
    Could not chdir to home directory /home/USER: Permission denied
    sscanf和正则表达式
    存储过程重置SEQUENCE值从新开始。
    Signal ()函数详细介绍 Linux函数(转)
    linux 环境NTP配置与开机自启动(转)
    linux下iconv()函数的用法(转载并修改)
  • 原文地址:https://www.cnblogs.com/codeyuan/p/4254557.html
Copyright © 2011-2022 走看看