L3-001 凑零钱 (30 分)

简介: L3-001 凑零钱 (30 分)

韩梅梅喜欢满宇宙到处逛街。现在她逛到了一家火星店里,发现这家店有个特别的规矩:你可以用任何星球的硬币付钱,但是绝不找零,当然也不能欠债。韩梅梅手边有 104 枚来自各个星球的硬币,需要请你帮她盘算一下,是否可能精确凑出要付的款额。


输入格式:

输入第一行给出两个正整数:N(≤104)是硬币的总个数,M(≤102)是韩梅梅要付的款额。第二行给出 N 枚硬币的正整数面值。数字间以空格分隔。


输出格式:

在一行中输出硬币的面值 V1≤V2≤⋯≤Vk,满足条件 V1+V2+...+Vk=M。数字间以 1 个空格分隔,行首尾不得有多余空格。若解不唯一,则输出最小序列。若无解,则输出 No Solution


注:我们说序列{ A[1],A[2],⋯ }比{ B[1],B[2],⋯ }“小”,是指存在 k≥1 使得 A[i]=B[i] 对所有 i<k 成立,并且 A[k]<B[k]。


输入样例 1:

1. 8 9
2. 5 9 8 7 2 3 4 1

结尾无空行


输出样例 1:

1 3 5

结尾无空行


输入样例 2:

1. 4 8
2. 7 2 4 3

结尾无空行


输出样例 2:

No Solution


#include<bits/stdc++.h>
using namespace std;
const int N=1e4+10;
int n,m,cnt,t,k;
int a[N],ans[N];
void dfs(int u,int sum)
{
    if(sum>m) return ;
    if(sum==m)
    {
        t=1;
        cout<<ans[0];
        for(int i=1;i<k;i++) cout<<' '<<ans[i];
        return ;
    }
    for(int i=u;i<n;i++)
    {
        ans[k++]=a[i];
        dfs(i+1,sum+a[i]);
        if(t) break;
        k--;
    }
}
int main()
{
    cin>>n>>m;
    for(int i=0;i<n;i++) cin>>a[i],cnt+=a[i];
    sort(a,a+n);
    if(cnt<m) cout<<"No Solution";
    else
    {
        dfs(0,0);
        if(!t) cout<<"No Solution";
    }
    return 0;
}


目录
相关文章
|
3月前
|
存储 C++
【洛谷 P1089】[NOIP2004 提高组] 津津的储蓄计划 题解(循环)
**摘要:** 这是一个关于编程竞赛题目的摘要,题目编号NOIP2004提高组,名为“津津的储蓄计划”。津津每月初从妈妈那里获得300元,需要根据预算决定储蓄。若预计月底有超过或正好100元,她会存储整百金额。如果某月资金不足预算,输出第一个这样的月份加负号;否则,计算年末时津津手中的总金额(储蓄部分加20%)。输入是12个月的预算,输出是一个整数结果。提供的C++代码示例用于处理这个问题,通过迭代计算每个月的资金状况。样例输入和输出展示了不同情况下的结果。
26 0
|
4月前
|
算法 测试技术
联想算法题-小朋友分糖果
联想算法题-小朋友分糖果
32 0
|
10月前
|
算法
代码随想录算法训练营第四十三天 | LeetCode 518. 零钱兑换 II、377. 组合总和 Ⅳ
代码随想录算法训练营第四十三天 | LeetCode 518. 零钱兑换 II、377. 组合总和 Ⅳ
47 1
|
4月前
|
存储 算法 程序员
【算法训练-动态规划 一】【应用DP问题】零钱兑换、爬楼梯、买卖股票的最佳时机I、打家劫舍
【算法训练-动态规划 一】【应用DP问题】零钱兑换、爬楼梯、买卖股票的最佳时机I、打家劫舍
113 0
算法练习Day44|70. 爬楼梯 (进阶)● 322. 零钱兑换 ● 279.完全平方数
算法练习Day44|70. 爬楼梯 (进阶)● 322. 零钱兑换 ● 279.完全平方数
|
测试技术
L2-003 月饼 (25 分)(贪心)
L2-003 月饼 (25 分)(贪心)
73 0
【每日一道智力题】之海盗分金币(上)
【每日一道智力题】之海盗分金币(上)
237 0
|
算法
代码随想录训练营day44| 518. 零钱兑换 II 377. 组合总和 Ⅳ
代码随想录训练营day44| 518. 零钱兑换 II 377. 组合总和 Ⅳ
118 0
代码随想录刷题|LeetCode 860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球
代码随想录刷题|LeetCode 860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球
代码随想录刷题|LeetCode 860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球
当女朋友说这个618要凑单买……
当女朋友说这个618要凑单买……
95 0
当女朋友说这个618要凑单买……