2020-处理木棒最小花费

题目描述:

现在有n根木棒,每一根都有一个长度和重量,现在有一个木棒的处理机器,小招喵要处理这n根木棒,这个机器的花费如下:处理第一木棒需要花费1,如果处理当前木棒的长度和重量都大于等于上一根木棒的长度和重量,则不需要花费,否则花费1,现在小招喵可以以任意顺序摆这些木棒。问最小花费是多少?
输入:
n
weight [ ]
length [ ]
如:
n = 5;
weight ={4,9,5,2,2};
length = {1,3,5,1,4};

输出:
2

分析

  • 所有解的情况是所有木棒的全排列, 这样可以通过深度优先搜索实现。
  • 设置一个seq[n] 数组,用于盛放之前设置的木棒次序。
  • 设置一个used[n]数组,用于查看是否使用过某一木棒。
  • 编写一个递归函数,使用回溯法,对所有情况遍历。
  • 如果到叶节点,判断下是否需要更新最小值。

java 代码

public class Solution {
    static int mini = 9999;
     static int [] weight = {4,9,5,2,2};
    static int [] length = {1,3,5,1,4};
    static int n = 5;
    public static void main(String[] args) {

        for(int i = 0; i < n; i++){
            //默认false 没有使用
            boolean [] used = new boolean[n];
            used[i] = true;
            int  []  seq = new int [n];
            //第i木棒位置0已经使用
            seq[0] = i;
            //从位置1往后寻找
            helper( 1, 1, used,seq);
            for(int k :seq){
                System.out.print(k);

            }
            System.out.println();
        }
        System.out.println(mini);
    }
    public static void   helper(int position,int res,boolean [] used,int [] seq){
        if(position == n ){
            if( res < mini){
                mini = res;
            }
            return ;
        }
        for(int i = 0; i < n; i++){
            //如果i没有使用过
            if(!used[i]){
                used[i] = true;
                //试图在position上放置i
                seq[position] = i;
               if((weight[i] >= weight[seq[position-1]]) && (length[i] >= length[seq[position-1]])){
                    helper(position+1,res,used,seq);
               }else{
                   helper(position+1,res+1,used,seq);
               }
               used[i] = false;
            }
        }
        return ;
    }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,272评论 0 4
  • 1. file n. 文件;v. 保存文件2. command n. 命令指令3. use v. 使用用途4. p...
    喵呜Yuri阅读 774评论 0 4
  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入到已排序好...
    依依玖玥阅读 1,287评论 0 2
  • 本系列出于AWeiLoveAndroid的分享,在此感谢,再结合自身经验查漏补缺,完善答案。以成系统。 Java基...
    济公大将阅读 1,541评论 1 6
  • 宇宙中 In this universe 我们并非孤立的存在 We never exist alone 与他人,无...
    YoginiAnn阅读 372评论 0 1