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

换钱的最少货币数

http://www.nowcoder.com/practice/4e05294fc5aa4d4fa8eacef2e606e5a8

思路:动态规划,建立aim+1位的数组f,f[i]表示i元所需最小张数。初始都赋值为-1,0位置的值为0.进行动态规划,对于每一个位置i,遍历面值数组,i减去面值在f数组范围内且可达(即f对应位置不为-1)则更新数组f。

#include <iostream>
#include <vector>
using namespace std;
int main(){
    int n,aim,temp;
    cin>>n>>aim;
    vector<int> nums;
    while(n--){
        cin>>temp;
        nums.emplace_back(temp);
    }
    vector<int> f(aim+1,-1);
    f[0]=0;
    n=nums.size();
    for(int i=1;i<=aim;++i){
        for(int j=0;j<n;++j)
            if(i-nums[j]>=0&&f[i-nums[j]]!=-1)
                if(f[i]==-1) f[i]=f[i-nums[j]]+1;
                else f[i]=min(f[i],f[i-nums[j]]+1);
    }
    cout<<f[aim];
}
全部评论

相关推荐

刘湘_passion:出国旅游?那就小心你的腰子咯
点赞 评论 收藏
分享
02-25 11:29
产品经理
牛客444597598号:兄弟 我只能说如果想找产品经理这种简历 基本就是毕业失业了 你这连实习都找不到的 简历跟产品经理一点都没有关系,你可以去搜搜产品的模版吧
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务