美文网首页
金矿问题,动态规划

金矿问题,动态规划

作者: 递归循环迭代 | 来源:发表于2018-06-13 15:48 被阅读18次
start() {

        this.memoMap = new Map()



        this.goldList = [{

            gold: 200,

            people: 3,

        },  {

            gold: 200,

            people: 3,

        },  {

            gold: 200,

            people: 3,

        },  ]

        this.count=0;

        this.goldList.forEach((e, i) => this.goldList[i].index = i)

        this.getMaxGold(this.goldList, [], 88);



    },

    getMaxGold(goldList, indexList, remainPeople) {



      // cc.log(goldList)

        for (let i in goldList) {

            this.count++;

            if (goldList[i].people <= remainPeople) {

                let newGoldList = goldList.slice(0);

                let newIndexList = indexList.slice(0);

                let needPeople = newGoldList[i].people

                newIndexList.push(newGoldList[i].index)

                newGoldList.splice(i,1)

                if (this.checkMemo(newIndexList)) {

                } else {

                    if (newGoldList.length > 0) {

                        this.getMaxGold(newGoldList, newIndexList, remainPeople - needPeople)

                    }

                }

            } else {

                this.checkMemo(indexList)

            }

        }

    },

    checkMemo(tag) {

        let gold = 0;

        let indexList2=tag.slice(0);



        indexList2.forEach(e => {

            gold += this.goldList[e].gold;

        })

        for (let i = 0; i < tag.length; i++) {

            for (let j = i + 1; j < tag.length; j++) {

                if (tag[i] > tag[j]) {

                    let temp = tag[j]

                    tag[j] = tag[i];

                    tag[i] = temp;

                }

            }

        }

        let result = this.memoMap.get(tag.join(','));

        if (!result) {

            this.memoMap.set(tag.join(','), gold)

            return false;

        } else {

            return true;

        }

    },


let arr = [389, 207, 155, 300, 299, 170, 158, 65];

        let data = [];

        for (let i = arr.length - 1; i >= 0; i--) {

            data.push({})

        }

        for (let i = arr.length - 1; i >= 0; i--) {

            let last = i ;

            for (let j = i; j >= 0; j--) {

                last--;

                if (last >= 0) {

                    if (arr[i] - arr[last] > 0) {



                    } else {

                        if (!data[i].num) {

                            data[i].num = 1;

                        }

                        if (data[last].num) {

                            data[last].num = Math.max(data[i].num + 1, data[last].num);

                        } else {

                            data[last].num = data[i].num + 1

                        }



                    }

                }

            }

        }

        cc.log(data)

相关文章

  • 金矿问题,动态规划

  • 浅层理解动态规划及利用动态规划解决最长公共子串等问题

    动态规划基本思想 动态规划的工作原理是先解决子问题,再逐步解决大问题。 用动态规划解决旅游规划问题 目前面对的问题...

  • 什么是动态规划

    目录 动态规划解决了什么 什么是动态规划 典型的动态规划 1. 动态规划解决了什么 的思想就是将大问题拆分成小问题...

  • 算法学习收藏

    动态规划问题 动态规划(最优子结构和重叠子问题的比较) 动态规划解决01背包问题 01背包问题 最优二叉查找树 《...

  • 其他来源:数据结构/算法学习笔记

    动态规划问题(Dynamic Programming) 首先,动态规划问题的一般形式就是求最值。动态规划其实是运筹...

  • 2022-02-19 动态规划高频题专题【1】

    动态规划基本类型 dp基础 背包问题 打家劫舍 股票问题 子序列问题 进阶动态规划 深入理解动态规划过程 定义dp...

  • [转载]通过金矿模型介绍动态规划

    原文链接:通过金矿模型介绍动态规划对于动态规划,每个刚接触的人都需要一段时间来理解,特别是第一次接触的时候总是想不...

  • 337. House Robber III

    key tips 动态规划返回两个状态 algorithm 1 尝试动态规划问题存在子问题结构,首先考虑动态规划在...

  • 动态规划(1)

    什么动态规划 动态规划是一种解决棘手问题的方法,它将问题分成小问题,并着手先解决这些小问题 动态规划的使用场景 g...

  • 算法3:动态规划

    5.动态规划5.1 什么是动态规划?5.2 自底向上的动态规划:5.3 自顶向下的动态规划5.4 0-1背包问题:...

网友评论

      本文标题:金矿问题,动态规划

      本文链接:https://www.haomeiwen.com/subject/xxgjeftx.html