2020-02-24:arr是面值数组,其中的值都是正数且没有重复。再给定一个正数aim。每个值都认为是一种面值,且认为张数是无

举报
福大大架构师每日一题 发表于 2021/02/24 22:01:59 2021/02/24
【摘要】 福哥答案2020-02-24:自然智慧即可。1.递归。有代码。2.动态规划。dp是二维数组。有代码。代码用golang编写,代码如下:```gopackage mainimport ("fmt")func main() {    arr := []int{1, 2, 3}    aim := 8    ret := minCoins1(arr, aim)    fmt.Println("1....

福哥答案2020-02-24:
自然智慧即可。
1.递归。有代码。
2.动态规划。dp是二维数组。有代码。

代码用golang编写,代码如下:

```go
package main

import (
"fmt"
)

func main() {
    arr := []int{1, 2, 3}
    aim := 8
    ret := minCoins1(arr, aim)
    fmt.Println("1.递归:", ret)
    ret = minCoins2(arr, aim)
    fmt.Println("2.动态规划:", ret)

}

const INT_MAX = int(^uint(0) >> 1)

func minCoins1(arr []int, aim int) int {
    return process1(arr, 0, aim)
}
func process1(arr []int, index int, rest int) int {
    if index == len(arr) {
        if rest == 0 {
            return 0
        } else {
            return INT_MAX
        }
    } else {
        ans := INT_MAX
        for zhang := 0; zhang*arr[index] <= rest; zhang++ {
            next := process1(arr, index+1, rest-zhang*arr[index])
            if next != INT_MAX {
                if ans > zhang+next {
                    ans = zhang + next
                }
            }
        }
        return ans
    }
}

func minCoins2(arr []int, aim int) int {
    if aim == 0 {
        return 0
    }
    N := len(arr)
    dp := make([][]int, N+1)
    for i := 0; i < N+1; i++ {
        dp[i] = make([]int, aim+1)
    }
    dp[N][0] = 0
    for j := 1; j <= aim; j++ {
        dp[N][j] = INT_MAX
    }
    for index := N - 1; index >= 0; index-- {
        for rest := 0; rest <= aim; rest++ {
            dp[index][rest] = dp[index+1][rest]
            if rest-arr[index] >= 0 && dp[index][rest-arr[index]] != INT_MAX {
                dp[index][rest] = getMin(dp[index][rest], dp[index][rest-arr[index]]+1)
            }
        }
    }
    return dp[0][aim]
}
func getMin(a int, b int) int {
    if a < b {
        return a
    } else {
        return b
    }
}
```
执行结果如下:

***
[左神java代码](https://github.com/algorithmzuo/algorithmbasic2020/blob/master/src/class22/Code02_MinCoinsNoLimit.java)
[评论](https://user.qzone.qq.com/3182319461/blog/1614121220)

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。