L3-001 凑零钱 深搜
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:
8 9
5 9 8 7 2 3 4 1
输出样例 1:
1 3 5
输入样例 2:
4 8
7 2 4 3
输出样例 2:
No Solution
要判所有硬币加起来总金额少于m,就没有必要搜了,这个是最后一个点,不写的话只有29分~
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<iostream>
#include<string>
#include<algorithm>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<vector>
using namespace std;
#define inf 0x3f3f3f3f
#define LL long long
int n,m,a[10005],pre[10005],f;
int out[10005],l=0;
void dfs(int t,int sum)
{//printf("t=%d sum=%d\n",t,sum);if(t==n||f)return;if(sum==m){f=1;while(t!=-1){out[l++]=a[t];t=pre[t];}return;}for(int i=t+1;i<n;i++){if(sum+a[i]<=m){pre[i]=t;dfs(i,sum+a[i]);}//else break;}
}
int main()
{int i,j,s=0;f=0;memset(pre,-1,sizeof pre);scanf("%d%d",&n,&m);for(i=0;i<n;i++){scanf("%d",&a[i]);s+=a[i];}if(s<m)printf("No Solution\n");else{sort(a,a+n);dfs(-1,0);if(f==0)printf("No Solution\n");else{for(i=l-1;i>=0;i--)printf("%d%c",out[i],i==0?'\n':' ');}}
}
L3-001 凑零钱 深搜相关推荐
- 【codevs1116】四色问题,深搜入门题目
(说实话我已开始是不想写这道题目的,因为太水了,但是发现最近实在是打不出什么好一些的题目,所以就凑活一下好了) 1116 四色问题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄 ...
- 深入递归、深搜dfs、回溯、剪纸学习。
深入递归,深搜dfs,回溯,剪枝 参考于博客 一.双管齐下解递归 "逐步生成结果"类问题之数值型 自下而上的递归(递推,数学归纳,动态规划) 解决简单情况下的问题. 推广到稍复杂情 ...
- PAT 团体程序设计天梯赛-练习集 题解(凑零钱,堆栈,社交集群)
开始准备cccc(cry)天梯赛了,第一周训练题,把官网挂出的训练题刷完了,对pat有了一点点的熟悉感. L1-1 就不说了... L1-2 打印沙漏 一个变量保存空格数,一个变量保存沙漏符号数,打 ...
- 算法学习 (门徒计划)3-3 深搜(DFS)与广搜(BFS)及经典问题 学习笔记
算法学习 (门徒计划)3-3 深搜(DFS)与广搜(BFS)及经典问题 学习笔记 前言 深搜与广搜 搜索的核心概念 问题求解树 搜索剪枝和优化 问题求解树的状态 对比深搜与广搜 DFS-深度(deep ...
- 算法很美:水洼数(dfs)深搜
题目描述 Descriptions: 由于近日阴雨连天,约翰的农场中中积水汇聚成一个个不同的池塘,农场可以用 N x M (1 <= N <= 100; 1 <= M <= 1 ...
- Go 分布式学习利器(15) -- Go 实现 深搜和广搜
强化语法,回顾算法. 通过Go语言实现 深度优先搜索 和 广度优先搜索,来查找社交网络中的三度好友关系(三度指的是一个节点到 其相邻节点 到 其相邻节点的节点 ,图递增三层好友关系). 涉及到的Go语 ...
- 水管工游戏 (深搜)
水管工游戏 本题依然是采用搜索,深搜,广搜都可以,本代码采用深搜,此题在搜索时需要增加一些判断条件以及下一步要搜索的位置即可. 代码如下: #include<stdio.h> int a[ ...
- L3-001 凑零钱(dfs+玄学剪枝=AC)
题目链接:L3-001 凑零钱 梅梅喜欢满宇宙到处逛街.现在她逛到了一家火星店里,发现这家店有个特别的规矩:你可以用任何星球的硬币付钱,但是绝不找零,当然也不能欠债.韩梅梅手边有 10^4 枚 ...
- Poj(2488),按照字典序深搜
题目链接:http://poj.org/problem?id=2488 思路:按照一定的字典序深搜,当时我的想法是把所有的可行的路径都找出来,然后字典序排序. 后来,凡哥说可以在搜索路径的时候就按照字 ...
最新文章
- Struts2+Spring详解
- centos不允许root直接登陆
- VC中获取窗体句柄的各种方法
- c语言大数相加怎么写,大数相加
- 前端学习(2165):vuecli3配置文件的修改和查看
- 小型网络的组建及排错
- 1.android体系结构介绍
- linux格式化nfs,NFS协议详解与配置实现
- 那些年,我们解析过的前端异常
- CEF3中js调用delphi内部方法
- Zend Famework 2 | 如何在自定义类中使用Service Manager
- 乡镇医院计算机管理,乡镇卫生院管理系统
- matlab读取txt文档三行数据库,Matlab中的textread textscan读取文本文件
- xp系统查计算机设备型号,xp电脑设备型号怎么查询
- 提供风声无组件上传类V2.11下载 解决图片尺寸读取问题
- android 测试键值,Android无线测试之—KEYCODE键值对应大全
- (由Active Desktop保存在桌面引起)桌面图标蓝底
- 算法分析:大O符号/大Ω符号/大Θ符号/小o符号/小w符号
- QT ACTIVEX最新操作WORD文档的一些心得
- DNS安全 DNS缓存投毒与防护