Sum It Up HDU - 1258【DFS】

2023-10-29

Given a specified total t and a list of n integers, find all distinct sums using numbers from the list that add up to t. For example, if t=4, n=6, and the list is [4,3,2,2,1,1], then there are four different sums that equal 4: 4,3+1,2+2, and 2+1+1.(A number can be used within a sum as many times as it appears in the list, and a single number counts as a sum.) Your job is to solve this problem in general. 
InputThe input will contain one or more test cases, one per line. Each test case contains t, the total, followed by n, the number of integers in the list, followed by n integers x1,...,xn. If n=0 it signals the end of the input; otherwise, t will be a positive integer less than 1000, n will be an integer between 1 and 12(inclusive), and x1,...,xn will be positive integers less than 100. All numbers will be separated by exactly one space. The numbers in each list appear in nonincreasing order, and there may be repetitions. 
OutputFor each test case, first output a line containing 'Sums of', the total, and a colon. Then output each sum, one per line; if there are no sums, output the line 'NONE'. The numbers within each sum must appear in nonincreasing order. A number may be repeated in the sum as many times as it was repeated in the original list. The sums themselves must be sorted in decreasing order based on the numbers appearing in the sum. In other words, the sums must be sorted by their first number; sums with the same first number must be sorted by their second number; sums with the same first two numbers must be sorted by their third number; and so on. Within each test case, all sums must be distince; the same sum connot appear twice. 
Sample Input
4 6 4 3 2 2 1 1
5 3 2 1 1
400 12 50 50 50 50 50 50 25 25 25 25 25 25
0 0
Sample Output
Sums of 4:
4
3+1
2+2
2+1+1
Sums of 5:
NONE
Sums of 400:
50+50+50+50+50+50+25+25+25+25
50+50+50+50+50+25+25+25+25+25+25

        这道题其实并不是很难,但是有时候有几处小细节很容易困扰到做题人到思维,有一度时间我的输出中只要该元素存在相同的值,那么存在该元素的式子中就会在输出中有一个相同的式子,后来一遍遍的读了程序才发现是有一处忘记了return造成的。

        这道题的思路就是对每个元素进行DFS深度优先搜索,是同时双重的一个搜索,就是有一步是一个个的往下搜,另外还有一条路线是搜下个不相同的元素(甚至可以是下下个、......以此类推),那么来讲一下我的主要结构吧:

void dfs(int b_i, int a_i, int sum)
{
    if(sum==t)
    {
        flag=true;
        for(int i=0; i<b_i-1; i++)
        {
            cout<<b[i]<<"+";
        }
        cout<<b[b_i-1]<<endl;
        return;
    }
    if(sum>t) return;
    if(a_i>=n) return;
    b[b_i]=a[a_i];
    dfs(b_i+1, a_i+1, sum+b[b_i]);
    while(a_i+1<n&&a[a_i+1]==a[a_i])
    {
        a_i++;
    }
    dfs(b_i, a_i+1, sum);
}

        这么一来就清晰明了了,我是对每个本状态中的b[i](也就是所需要的答案)进行操作,也可以作为充当记忆的数组,我们对b[i]进行一步步往下搜索的操作,让每个b[i]可以选择该元素也可以跳过这个元素去获得下一个不同的元素

完整代码

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int t,n;
int a[20];   //输入值
int b[20];   //输出值
bool flag=false;  //存在这样的答案吗?
bool cmp(int r1,int r2)
{
    return r1>r2;
}
void dfs(int b_i, int a_i, int sum)
{
    if(sum==t)
    {
        flag=true;
        for(int i=0; i<b_i-1; i++)
        {
            cout<<b[i]<<"+";
        }
        cout<<b[b_i-1]<<endl;
        return;
    }
    if(sum>t) return;
    if(a_i>=n) return;
    b[b_i]=a[a_i];
    dfs(b_i+1, a_i+1, sum+b[b_i]);
    while(a_i+1<n&&a[a_i+1]==a[a_i])
    {
        a_i++;
    }
    dfs(b_i, a_i+1, sum);
}
int main()
{
    while(scanf("%d%d",&t,&n),!(t==0&&n==0))
    {
        flag=false;
        for(int i=0; i<n; i++)
        {
            scanf("%d",&a[i]);
        }
        cout<<"Sums of "<<t<<":"<<endl;
        sort(a, a+n, cmp);
        dfs(0, 0, 0);
        if(!flag)
        {
            cout<<"NONE"<<endl;
        }
    }
    return 0;
}

        
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Sum It Up HDU - 1258【DFS】 的相关文章

  • 网易笔试:给出n个物品,每个物品都有自己的价值,每个物品只有一件,这些物品需要分给两个人,要求分配完之后,两个人的物品价值相同。分配完成之后,丢弃剩下的物品,求最少要丢弃多少物品。

    题目描述 给出n个物品 每个物品都有自己的价值 每个物品只有一件 这些物品需要分给两个人 要求分配完之后 两个人的物品价值相同 分配完成之后 会丢弃剩下的物品 求最少要丢弃多少物品 输入 输入第一行为总的测试数据个数 第二行为物品个数n 第
  • Tempter of the Bone【DFS+奇偶剪枝】scanf会WA!!!

    题目链接HDU1010 多好的一道题 交scanf会WA cin一发过 我WA了30 次 惊是这样的BUG 我就说我推的公式怎会错呢 如果有字体缩小的方式 我要把上面那行缩小些 先看大家WA 可真是一道有趣的题目 首先 有这样的图推出奇偶剪
  • Acwing-1112. 迷宫

    include
  • 力扣(LeetCode)257. 二叉树的所有路径

    给定一个二叉树 返回所有从根节点到叶子节点的路径 说明 叶子节点是指没有子节点的节点 示例 输入 1 2 3 5 输出 1 gt 2 gt 5 1 gt 3 解释 所有根节点到叶子节点的路径为 1 gt 2 gt 5 1 gt 3 通过次数
  • 深度优先搜索(二)—— n皇后问题、素数环、困难的串

    文章目录 n皇后问题 素数环 困难的串 n皇后问题 n n棋盘放n个棋子 要求每行每列每条对角线都只有一个棋子 输出可行的方案数 import java util Scanner public class lanqiao1 static i
  • 统计封闭岛屿的数目

    1254 统计封闭岛屿的数目 关于岛屿的相似题目 岛屿数量 二维矩阵的dfs算法 封闭岛屿数量 二维矩阵的dfs算法 统计封闭岛屿的数目 统计子岛屿 不同岛屿的数量 class MaxAreaOfIsland floodFill 算法 12
  • 璀璨光滑【牛客】【题意解析+BFS+贪心】

    题目链接 中文题意 表面平静 实则暗藏玄机 而打开本题的突破口 也确确实实就在于题目的描述 也就是说 这张图的边的数目是确定的 并且这是一张连通图 而且图上的个点每个点连接出去的边的数目都是条 因为每个数都刚好只与个数在二进制位上差1 那么
  • 剪格子 蓝桥杯 211

    题目描述 如下图所示 3 x 3 的格子中填写了一些整数 我们沿着图中的红色线剪开 得到两个部分 每个部分的数字和都是 60 本题的要求就是请你编程判定 对给定的 m n 的格子中的整数 是否可以分割为两个部分 使得这两个区域的数字和相等
  • BZOJ4345 [POI2016]Korale

    在病房里日题真是一种独特的体验 首先考虑求第一问 我们先把所有元素排序 我们用优先队列维护选数的集合 对每个集合维护集合里的元素的和v和最后一个元素 即最大的元素 lst 初始的时候我们把只包含最小元素的集合推入队列 那么我们取出一个队头元
  • CMake:递归检查并拷贝所有需要的DLL文件

    文章目录 1 目的 2 设计 整体思路 多层依赖的处理 获取 DLL 所在目录 探测剩余的 DLL 文件 3 代码实现 判断 stack 是否为空 判断 stack 是否为空 获取所有 target 检测并拷贝 DLL 4 使用 1 目的
  • poj 3074 Sudoku

    Time Limit 1000MS Memory Limit 65536K Total Submissions 7613 Accepted 2696 Description In the game of Sudoku you are giv
  • 【算法学习笔记】17:DFS与BFS

    1 DFS 深度优先搜索常用于解决需要给出所有方案的问题 因为它的搜索顺序就是能够得到一个完整的搜索路径 方案 后回退再去搜索其它的方案 1 1 例题 排列数字 由于要求所有排列的方案 可以每次从 1 n 1 n 1 n里拿一个数字 然后记
  • linux下载安装搭建、卸载FastDfs文件服务器、配置多存储路径(轮询、最大内存选择)、nginx反向代理实现图片预览、常用命令

    linux下载安装搭建 卸载FastDfs文件服务器 配置多存储路径 轮询 最大内存选择 nginx反向代理实现图片预览 常用命令 Springboot整合Fastdfs上传图片 缩略图 下载文件 需求 文件转存方案 springboot整
  • CentOS 7.9 64位 SCC版安装FastDfs和配置Nginx

    最近练习的项目中需要用到FastDfs 和Nginx 这里记录一下安装和配置过程 个人使用部署过程遇到了很多的坑 准备把过程记下来不然忘了 首先 购买 试用阿里云 CentOS 7 9 64位Scc版系统 进入远程桌面 由于项目较老 所以我
  • Knight Moves_dfs_2018_3_10

    A friend of you is doing research on the Traveling Knight Problem TKP where you are to find the shortest closed tour of
  • 深度、广度优先搜索

    文章目录 二 图的遍历 2 1 深度优先搜索 DFS DFS森林 应用 2 2 广度优先搜索 BFS 基本操作 应用 二 图的遍历 2 1 深度优先搜索 DFS DFS森林 Vertextype GetVex ALGraph G int v
  • Leetcode【DFS BFS】

    Leetcode 200 岛屿数量 题目 解题 思路 DFS解法 BFS解法 题目 给你一个由 1 陆地 和 0 水 组成的的二维网格 请你计算网格中岛屿的数量 岛屿总是被水包围 并且每座岛屿只能由水平方向和 或竖直方向上相邻的陆地连接形成
  • 链式前向星存树图和遍历它的两种方法【dfs、bfs】

    目录 一 链式前向星存图 二 两种遍历方法 一 链式前向星存图 n个点 n 1条边 链式前向星把上面的树图存下来 输入 9 代表要存进去n个点 1 2 下面是n 1条边 每条边连接两个点 1 3 1 7 2 4 4 5 4 6 3 8 3
  • 【算法】深度优先搜索DFS 入门:基本知识+经典例题

    DFS最重要的是理清搜索顺序 ps 这是我入门dfs时写的博客 后来dfs渐渐熟练了 也补充了一些题目上去 带原题和代码 个人感觉整篇博文从上到下确实由易到难 代码也由开始的冗长变得渐渐精简 自学DFS看的视频 小甲鱼 讲原理 青岛大学 王
  • 无向图染色问题-dfs剪枝

    无向图染色问题 问题描述 给定一个无向图 要求用最少的颜色将节点染色 限制是不能让相邻节点染上相同的颜色 算法 使用dfs 为节点分配不同的颜色进行尝试 计算每种分配所需的颜色数 最终进行回溯 取得最小的颜色数 代码 C include

随机推荐

  • matlab高代求商与余式,matlab求商取余remmod区别

    当除数和被除数同为正时 gt gt rem 10 91 ans 10 gt gt mod 10 91 ans 10 当除数和被除数同为负时 gt gt rem 10 91 ans 10 gt gt mod 10 91 ans 10 当除数和
  • 数字一阶低通滤波器立体解析

    一阶惯性环节 一个独立储能元件和一个耗能元件的组合 就可以构成一个惯性环节 下图就是一个常见的电路 一阶滤波电路 也可以叫一阶惯性环节 为什么叫一阶惯性环节呢 是因为当输入信号发生突变的时候 输出信号不能突变 只能按照指数规律逐渐变化 是不
  • react基础05--react-router 路由

    react基础05 react router 路由 1 介绍 2 方法 案例 react router 路由的基本使用 路由传参 Switch 路由匹配 嵌套路由 3 注意事项 4 说明 1 介绍 react基础04 redux 管理数据
  • jQuery实现各种轮播图

    目录 无限循环滚动 百叶窗 轮播一 轮播二 轮播三 无限循环滚动 margin 0 padding 0 div width 1120px height 300px border 1px solid 000 margin 100px auto
  • 推荐5个非常强大的ChatGPT浏览器插件|你的生产力提高工具

    近期 ChatGPT变得越来越热门 为此 许多浏览器插件也随之问世 这些基于ChatGPT的浏览器插件大大提高了ChatGPT的能力 使得我们能够更高效地在平时的上网 工作和学习中获得帮助 从而节省了大量时间 今天我来给大家介绍几款非常好用
  • .asp中.cs文件路径在哪_ASP.NET实战007:MVC解决跨域请求问题详解

    前面刚说到Vue实战057 前端解决跨域问题详解 今天顺便把ASP NET MVC的跨域解决方案也分享下 什么是跨域问题这里就不在复述了 前面已经解释了很多次了 需要了解的可以参考Vue实战057 前端解决跨域问题详解 这里主要说下在ASP
  • 史上最强多线程面试47题(含答案),建议收藏

    点击上方 Java之间 选择 置顶或者星标 你关注的就是我关心的 来源 java互联网架构 上一篇 天天吹微服务 单体应用有啥不好 金九银十快到了 即将进入找工作的高峰期 最新整理的最全多线程并发面试47题和答案总结 希望对想进BAT的同学
  • windows下docker的安装

    1 打开官网 https www docker com products docker desktop 看了一下官网这个页面是有些变化的 但是只要你认识windows这个单词 基本上下个windows版本的docker安装包是没问题的 2
  • ruoyi框架解决单个账户并发登录,限制多个浏览器或同一浏览器登录同个一账号

    ruoyi框架解决单个账户并发登录 限制多个浏览器或同一浏览器登录同个一账号 今天突然要解决限制一个账号多个浏览器登录问题 系统用的是若依框架 实现思路如下 application yml配置 这里在配置文件里面设置是否限制 如果以后不需要
  • 深入“自自顶向下,逐步求精”——面向过程程序设计方法

    文章转自 http blog csdn net sxhelijian article details 7303605 程序设计初学者常常受困于不会想问题 不知道让计算机解决这个问题该如何做 其实 程序员的一个基本功是 能够将复杂的问题分解开
  • 基于Vue实现一个有点意思的拼拼乐小游戏

    笔者去年曾写过一个类似的拼拼乐小游戏 技术栈采用自己的Xuery框架和原生javascript实现的 脚手架采用gulp来实现 为了满足对vue的需求 笔者再次使用vue生态将其重构 脚手架采用比较火的vue cli 前言 为了加深大家对v
  • 数据噪声以及去噪

    数据挖掘中的噪声简介 实际数据是数据挖掘算法的输入 它受多个组件的影响 其中 噪声的存在是关键因素 噪声是不可避免的问题 它会影响数据挖掘应用程序中经常发生错误的数据收集和数据准备过程 噪声有两个主要来源 隐式错误由测量工具引入 以及批处理
  • 【IEEE出版】工业自动化,机器人与控制工程国际会议(IARCE 2022)

    IARCE 工业自动化 机器人与控制工程国际会议 IARCE 2022 中国 成都 会议官方网站 www iarce org 会议邮箱 iarce hksra org 摘要时间 9月30日 全文截稿时间 10月7日 01 IARCE会议简介
  • 【Neo4j】第 6 章:节点重要性

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • mysql 多选数据类型_MySQL基础操作与数据类型

    目录 1 文件夹 库 增 改 查 删 2 文件 表 增 改 查 删 3 文件的一行内容增 改 查 删 4 创建表的完整语法 5 整型类型 6 补充sql mode 7 浮点型 8 字符类型 9 日期类型 10 枚举与集合类型 11 not
  • AIR103

    基础资料 基于Air103开发板 Air103 LuatOS 文档 上手 开发上手 LuatOS 文档 探讨重点 对官方社区库接口GPIO库使用及示例进行复现及分析 了解该的基本原理及操作方法 软件及工具版本 LuatOS AIR103 b
  • 定时任务@Scheduled用法及其参数讲解

    1 基本用法 Scheduled 由Spring定义 用于将方法设置为调度任务 如 方法每隔十秒钟被执行 方法在固定时间点被执行等 Scheduled fixedDelay 1000 上一个任务结束到下一个任务开始的时间间隔为固定的1秒 任
  • android获取版本号报错,Android 7.1 Industry版本有概率启动报错(无法获取EGLConfig)...

    本帖最后由 prece 于 2020 7 22 11 48 编辑 在RK3399开发板 Station P1上 运行Android 7 1 Industry版本有概率启动报如下错误 07 22 11 36 31 746 595 595 F
  • [OpenAirInterface实战-8] :OAI编译遇到的问题与解决方法汇总

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 OpenAirInterface实战 8 OAI编译遇到的问题与解决方法汇总 文火冰糖 王文兵 的博客 CSDN博客 问题类型1 ASN 1
  • Sum It Up HDU - 1258【DFS】

    Given a specified total t and a list of n integers find all distinct sums using numbers from the list that add up to t F