题解 | #换钱的最少货币数#

换钱的最少货币数

http://www.nowcoder.com/practice/3911a20b3f8743058214ceaa099eeb45

动态规划(完全背包):dp[i]表示兑换面值为i的钱币(装满容量为i的背包)所需要的最少货币数(物品数),第i个状态由上一状态,即放或者不放第j个物品推导而来,初始化dp为最大值,dp[0]=0.

class Solution {
public:
    /**
     * 最少货币数
     * @param arr int整型vector the array
     * @param aim int整型 the target
     * @return int整型
     */
    int minMoney(vector<int>& arr, int aim) {
        vector<int> dp(aim+1,999999);
        dp[0]=0;
        for(int j=0;j<arr.size();j++)
            for(int i=1;i<=aim;i++)
                if(i-arr[j]>=0)
                    dp[i]=min(dp[i],dp[i-arr[j]]+1);
        return dp[aim]==999999 ? -1: dp[aim];
    }
};


全部评论

相关推荐

VirtualBool:都去逗他了?
点赞 评论 收藏
分享
RickieOne:还有一个面试,上来就笔试算法 1️⃣ 字符串分割不能用 split ,ab&&c,根据&&放到数组上 2️⃣a 到 z 的全部组合情况,包括 a...z 3️⃣多线程,同时打印 1-200 4️⃣sql 代码 考分组 聚合 平均结合 小厂也这样吗,然后就八股 再拷打项目
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务