题意:给一个数a和n个数b1,b2,...,bn。

从n个数中选择一些数重新排列成c1,c2,...,cm使得a%c1%c2%...%cm=0.

如果能选出则输出最少需要几个数,否则输出-1。

分析:

首先很重要的一点就是 “一定是先除大的数再除小的数”

因为如果先除小的数x,则取模的数一定是在0到x-1中,再除大于x的数是没意义的。

即选出的一列数是非递增序列。

由于n最多只有20个,简单的2^n的搜索即可搞定了。

通过这题发现hdu oj的一个bug

就是排序的时候不能手写整数的cmp使其逆序排列,否则g++判RE,c++判wa。

有两种写法,其实思路一样,处理手法有一点区别:

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 #include<algorithm>
 5 #include<cstdlib>
 6 #include<cmath>
 7 #include<vector>
 8 #include<queue>
 9 #include<map>
10 #include<set>
11 #define eps 10e-13
12
13 using namespace std;
14
15 typedef long long ll;
16
17 int b[25],v[25],n,a,c,ans;
18 bool vis[25];
19
20 void dfs(int cur)
21 {
22     if(cur==-1)
23     {
24         int t = a;
25         for(int i=0;i<c;i++)
26             t%=v[i];
27         if(t==0) ans = min(ans,c);
28         return;
29     }
30     vis[cur] = true;
31     v[c++] = b[cur];
32     dfs(cur-1);
33     vis[cur] = false;
34     c--;
35     dfs(cur-1);
36 }
37
38 int main()
39 {
40     int T;
41     scanf("%d",&T);
42     while(T--)
43     {
44         scanf("%d%d",&n,&a);
45         for(int i=0;i<n;i++)
46             scanf("%d",&b[i]);
47         sort(b,b+n);
48         c = 0;
49         memset(vis,0,sizeof(vis));
50         ans = 30;
51         dfs(n-1);
52         printf("%d\n",ans==30?-1:ans);
53     }
54     return 0;
55 }

View Code

更简洁:

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 #include<algorithm>
 5 #include<cstdlib>
 6 #include<cmath>
 7 #include<vector>
 8 #include<queue>
 9 #include<map>
10 #include<set>
11 #define eps 10e-13
12
13 using namespace std;
14
15 typedef long long ll;
16
17 int b[30],v[30],n,a,c,ans;
18
19 void dfs(int cur,int x,int len)
20 {
21     if(x==0) ans = min(ans,len);
22     if(cur==-1) return;
23     dfs(cur-1,x,len);
24     dfs(cur-1,x%b[cur],len+1);
25 }
26
27 int main()
28 {
29     int T;
30     scanf("%d",&T);
31     while(T--)
32     {
33         scanf("%d%d",&n,&a);
34         for(int i=0;i<n;i++)
35             scanf("%d",&b[i]);
36         sort(b,b+n);
37         c = 0;
38         ans = 30;
39         dfs(n-1,a,0);
40         if(ans<30) printf("%d\n",ans);
41         else printf("-1\n");
42     }
43     return 0;
44 }

View Code

转载于:https://www.cnblogs.com/hadis-yuki/p/4695415.html

Hdu 5339 Untitled (数学思维)相关推荐

  1. hdu 5339 Untitled【搜索】

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5339 题意:一个整数a 和一个数组b.问你能否在b中取出r个元素排列组成c数组满足a%c1%c1%-. ...

  2. swing打地鼠游戏_在家也能玩的幼儿数学思维小游戏(2)多种数数的方法

    相信不少关注幼儿数学思维学习的家长朋友们都知道,孩子数数有几个阶段和过程,最开始的时候是唱数,然后过渡过用手指点数,能按物取数.按数取数,理解数的实际意义,最后到认识数字.这是孩子正常的数数阶段.在掌 ...

  3. 扑克牌排序_巧用扑克牌搞定孩子的数学思维启蒙,聪明的妈妈都在玩这样的游戏...

    很多家长谈到数学思维启蒙,都一个头两个大,不知道怎么去做.客观来说,数学思维启蒙说难也难,说简单也简单,本文是数萌在线的老师把数学思维课上常玩的数学思维游戏与扑克牌游戏结合,对提升孩子思维能力的效果非 ...

  4. 找出所有层级_数轴上的行程问题1:你的数学思维水平在哪一个层级?

    前言:对于很多学生来说,从小学六年级到初中一年级,数学学习仿佛一下子迷失了方向,相当长时间找不到切入点,无法适应初中数学的学习.究其根本原因,是思考问题的方式出了问题,小学熟知的算术思维迟迟不能跨越. ...

  5. 中国人数学好,数学思维差?

    小天经常可以看到在微博热搜吐槽歪果仁数学不好的段子,比如6.8,我们习惯给11.8,让收银员找5块钱,但歪果仁就不行啦,这样他们会更乱! 所以我们容易觉得中国人数学好,算数特别快还准!但算术,只能说是 ...

  6. 数学思维比数学运算更重要

    全世界只有3.14 % 的人关注了 数据与算法之美 数学的证明依靠严密的逻辑推理,一经证明就永远正确,所以,数学证明是绝对的. 相对而言,科学的证明则依赖于观察.实验数据和理解力,科学理论的证明难以达 ...

  7. 计算机思维与数学思维的本质区别

    计算机思维和数学思维,都包括了抽象和逻辑. 数学的抽象,在于剥离具体.数学研究从公理出发,可以变成纯思维的活动,和具体的的现实脱离关系.数学上的人为"定义",就是为了尽可能给出范围 ...

  8. 张景中院士:好的老师应当向学生展示数学思维的美妙

    做有趣的事情.自己心甘情愿要做的事情,做起来就快乐:做枯燥乏味的事.不得不做而又不想做的事.做起来就痛苦.但这有趣或枯燥又因人因时而异,饮酒.下棋.踢球.学习数学都是这样. 学习数学的乐趣类似于下棋, ...

  9. 推荐一位朋友(大学教授)写给孩子的数学思维书

    今天是六一儿童节,真诚推荐一位朋友(南京师范大学计算机学院教授)写给孩子的数学思维书,面对内卷.鸡娃的教育现状,看看一位前全国数学奥赛一等奖.江苏赛区第一名.高考数学满分得主写给孩子的数学书. 下文原 ...

最新文章

  1. 使用RxJava实现ImageView的拖动、旋转和缩放
  2. Oracle计算时间差表达式
  3. 轻量级HTTP服务器Nginx(配置与调试Nginx)(转)
  4. SharePoint 2013 配置基于AD的Form认证
  5. 【Android 插件化】Hook 插件化框架 ( 加载插件包资源 )
  6. 个人笔记本上win10+yolov3+python+tensorflow+keras训练自己的识别模型
  7. docker-compose部署thingsboard(docker部署thingsboard)
  8. H3C SecPath F100-C 防火墙默认配置
  9. spring学习-xml属性注入-数组--list--map--set类型
  10. solidity 合约权限授权_Curve + zkSync L2:以太坊的ZK Rollup智能合约
  11. (原)logstash-forwarder + logstash + elasticsearch + kibana
  12. javplayer 使用教程_童装裁剪之连衣裙打版教程 有图纸
  13. 芯片厂商的电机控制方案
  14. Python转换excel文件,将xlsx文件转换为xls文件
  15. 空间分辨率和灰度分辨率
  16. 拼多多Temu如何批量养国外买家账号进行拉新?
  17. 桌面下雪小程序 WIN32
  18. 基于手机信令数据研究交通出行特征具体实现
  19. 阿里云李津:公有云做的是信心与责任!
  20. python随机库函数_python标准库中的随机分布函数

热门文章

  1. linux history 看更多历史记录_Linux内核5.3+将更多支持F2FS
  2. python切片输出_Python语言之详解切片
  3. 收款码合并有什么弊端_合并收款码小程序,合并收款码助手
  4. 不使用输入框如何实现下拉_如何利用Axure实现下拉子菜单?
  5. java简述常见的布局极其特点_请简要说明 Android 中五种常见布局的特点。_学小易找答案...
  6. 新华三社招流程_【面试经验|校招】新华三/产品经理
  7. 通过反射创建新类示例的两种方式及比较
  8. 无心剑中译切尼《当代的悖论》
  9. 【BZOJ1800】飞行棋,没有最好(ge pi)只有更好
  10. bzoj1304 [CQOI2009]叶子的染色 dfs+树形dp