zoukankan      html  css  js  c++  java
  • 装载问题(回溯_子集树)

    时限:1000ms 内存限制:10000K 总时限:3000ms

    描述:

    有两艘船,载重量分别是c1、 c2,n个集装箱,重量是wi (i=1…n),且所有集装箱的总重量不超过c1+c2。确定是否有可能将所有集装箱全部装入两艘船。

    输入:

    多个测例,每个测例的输入占两行。第一行一次是c1、c2和n(n<=10);第二行n个整数表示wi (i=1…n)。n等于0标志输入结束。

    输出:

    对于每个测例在单独的一行内输出Yes或No。

    输入样例:

    7 8 2
    8 7
    7 9 2
    8 8
    0 0 0

    输出样例:

    Yes

    No

    #include<stdio.h>
    int c1,c2,n,w[10];//待输入数据
    int weight=0,max=0;
    void search(int m)//0,1,2...n
    {
        if(m==n)
        {    if(weight<=c1 )//船一放得下
               if(weight>=max)//能放更多到船一
                     max=weight;
        }
        else
        {   if(weight+w[m]<=c1)//取重量为w[m]的集装箱(满足取的条件)
            {   weight += w[m];
                search(m+1);
                weight -=w[m];
            }
            search(m+1);//不取重量为w[m]的集装箱(不满足取的条件或满足也不取)
        }
    }
    int main()
    {
        int i,sum=0;
        scanf("%d%d%d",&c1,&c2,&n);//船一,船二的载重c1,c2,集装箱的个数n    
        while(n!=0)
        {
            for(i=0;i<n;i++)
            {    scanf("%d",&w[i]);//每个集装箱重量
                sum += w[i];//集装箱总重量
            }
            search(0);        
            if(sum-max<=c2)
                printf("Yes\n");
            else
                printf("No\n");
    
            max=0;
            sum=0;
            scanf("%d%d%d",&c1,&c2,&n);    
        }
        return 0;
    }
  • 相关阅读:
    js联系题目
    js运算符
    太极图
    第一周 Welcome
    对 vscode 自动格式化的结果不太满意,我们该如何自己调整直至自己满意为止
    ASP.NET MVC5.0 OutputCache不起效果
    对照实验(1)-批量清理系统临时文件
    ES6
    19.局部变量和全局变量
    18.函数定义和参数
  • 原文地址:https://www.cnblogs.com/IThaitian/p/2585425.html
Copyright © 2011-2022 走看看