博客
关于我
每日一题-dfs遍历
阅读量:326 次
发布时间:2019-03-04

本文共 1420 字,大约阅读时间需要 4 分钟。

选择困难症

链接:https://ac.nowcoder.com/acm/problem/13594

来源:牛客网

题目描述

小L有严重的选择困难症。
早上起床后,需要花很长时间决定今天穿什么出门。
假设一共有k类物品需要搭配选择,每类物品的个数为Ai,每个物品有一个喜欢值Vj,代表小L对这件物品的喜欢程度。
小L想知道,有多少种方案,使得选出来的总喜欢值>M
需要注意,每类物品,至多选择1件,可以不选。

输入描述:

多组输入
每组数据第一行输入k M(k<=6,1<=M<=1e8),表示有多少类物品
接下来k行,每行以Ai(1<=Ai<=100)开头,表示这类物品有多少个,接下来Ai个数,第j个为Vj(1<=Vj<=1e8),表示小L对这类物品的第j个的喜欢值是多少。

输出描述:

每组输出一行,表示方案数
示例1
输入
2 5
3 1 3 4
2 2 3
2 1
2 2 2
2 2 2
输出
3
8

先贴源码:

#include
using namespace std;typedef long long ll;const int maxn = 105;int a[7][maxn];//存储数据ll k,m,sum;int b[7];void dfs(int lev,int val){ if(val>m) { ll res = 1; for(int i=lev;i<=k;i++) { res *= (b[i]+1); } sum += res; return ; } if(lev>k) return;//层数超出限制 for(int i=0;i<=b[lev];i++) { dfs(lev+1,val+a[lev][i]); }}int main(){ while(cin>>k>>m) { sum = 0; for(int i=1;i<=k;i++) { cin>>b[i]; for(int j=1;j<=b[i];j++) { cin>>a[i][j]; } } dfs(1,0); cout<
<<"\n"; } return 0;}

手写图解:

在这里插入图片描述
思路解析:

对于每类的数据,可以把它理解为树的每一层。

每层的树都要面临 b[i]+1 种选择,把它理解为每个节点的子节点。

因为每层(每类的物品)都要进行选择,要么选一个,要么不选,每类物品都是如此,所以就要dfs进行搜索,递归进行下去。

我对递归的一点理解:就是每次数据进行处理的步骤都是类似的,比如本题,每类的物品都要进行选择,就可以用递归来做。

本题对于dfs的终点的解读:

必须先判断累加的值是否大于给定的m,因为如果先判断是否出界,最后一类物品可能满足取的价值和已经大于m,但是因为先判断出界而没有算上最后一类物品导致少算。

感兴趣可关注公众号领取大量资料。

在这里插入图片描述

转载地址:http://znrq.baihongyu.com/

你可能感兴趣的文章
NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
查看>>
NIFI同步MySql数据源数据_到原始库hbase_同时对数据进行实时分析处理_同步到清洗库_实际操作06---大数据之Nifi工作笔记0046
查看>>
Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
查看>>
NIFI大数据进阶_FlowFile拓扑_对FlowFile内容和属性的修改删除添加_介绍和描述_以及实际操作---大数据之Nifi工作笔记0023
查看>>
NIFI大数据进阶_FlowFile生成器_GenerateFlowFile处理器_ReplaceText处理器_处理器介绍_处理过程说明---大数据之Nifi工作笔记0019
查看>>
NIFI大数据进阶_FlowFile生成器_GenerateFlowFile处理器_ReplaceText处理器_实际操作---大数据之Nifi工作笔记0020
查看>>
NIFI大数据进阶_Json内容转换为Hive支持的文本格式_实际操作_02---大数据之Nifi工作笔记0032
查看>>
NIFI大数据进阶_Json内容转换为Hive支持的文本格式_操作方法说明_01_EvaluteJsonPath处理器---大数据之Nifi工作笔记0031
查看>>
NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka消费者处理器_来消费kafka数据---大数据之Nifi工作笔记0037
查看>>
NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka生产者---大数据之Nifi工作笔记0036
查看>>
NIFI大数据进阶_NIFI的模板和组的使用-介绍和实际操作_创建组_嵌套组_模板创建下载_导入---大数据之Nifi工作笔记0022
查看>>
NIFI大数据进阶_NIFI监控功能实际操作_Summary查看系统和处理器运行情况_viewDataProvenance查看_---大数据之Nifi工作笔记0026
查看>>
NIFI大数据进阶_NIFI监控的强大功能介绍_处理器面板_进程组面板_summary监控_data_provenance事件源---大数据之Nifi工作笔记0025
查看>>
NIFI大数据进阶_NIFI集群知识点_认识NIFI集群以及集群的组成部分---大数据之Nifi工作笔记0014
查看>>
NIFI大数据进阶_NIFI集群知识点_集群的断开_重连_退役_卸载_总结---大数据之Nifi工作笔记0018
查看>>
NIFI大数据进阶_使用NIFI表达式语言_来获取自定义属性中的数据_NIFI表达式使用体验---大数据之Nifi工作笔记0024
查看>>
NIFI大数据进阶_内嵌ZK模式集群1_搭建过程说明---大数据之Nifi工作笔记0015
查看>>
NIFI大数据进阶_内嵌ZK模式集群2_实际操作搭建NIFI内嵌模式集群---大数据之Nifi工作笔记0016
查看>>
NIFI大数据进阶_外部ZK模式集群1_实际操作搭建NIFI外部ZK模式集群---大数据之Nifi工作笔记0017
查看>>
NIFI大数据进阶_实时同步MySql的数据到Hive中去_可增量同步_实时监控MySql数据库变化_操作方法说明_01---大数据之Nifi工作笔记0033
查看>>