题目描述

关于我转生变成史莱姆这档事这部番剧中,上班族的三上悟因为某个事件而作为史莱姆在异世界转生了。在转生时得到了“大贤者”和“捕食者”这两个独特技能。虽然身为史莱姆,但也想和其他种族建立起友好关系。魔素是异世界里面魔物含有的魔力精华,捕食者这个技能就是吞噬魔素,捕食者的技能要求非常苛刻,如果你第一天吞噬了b魔素,那么你第二天可以吞噬第一天的2~9倍(必须是其中一个整数),也就是2b~9b,也就是说,史莱姆在第i天所吞噬的魔素一定是第i-1天的2~9倍,而且还必须是它的整数倍。
作为史莱姆手下的得力助手,哥布林们准备了大量的魔物供主人食用,现在史莱姆已经知道了这些魔物含有S魔素,现在请大贤者合理安排第一天要吞噬和接下来每天需要增加的魔素倍数,好让史莱姆能在最短的天数内恰好吞噬完魔素。由于大贤者要研究“哲学”,无暇顾及这些小事,现在只能请你帮忙,但是大贤者还建议,这些魔素至少要用两天来吞噬。

输入

一个正整数S,代表要吞噬的魔素总量。

输出

一个数,代表要吞噬的天数,如果无解输出-1。

样例输入 Copy

571

样例输出 Copy

5

提示

对于30%数据,有S<=100;
对于70%数据,有S<=107;
对于100%数据,有9<S<=8×108


题目分析:很玄学的一个题,因为数据范围比较大所以一直不敢切,感觉dfs爆搜会超时,看来还是高估出题人给的数据了

首先因为每一天吞噬的魔素必须是前一天的2~9倍,那么我们设 p ∈[ 2 , 9 ] ,第一天吞噬的魔素为 a ,那么往后吞噬的总魔素的数量为:a + a*p1 + a*p1*p2 ... + a*p1*p2*...*pk ,合并同类项之后,就变成了 a * ( 1 + p1 * ( 1 + p2 * ( 1 + ...( 1 + pk ) ) ) ) ,这样也就变成了一个中规中矩的递归的表达式了,对于每次最外面的 a 来说,因为 a * ( 1 + p1 * ( 1 + p2 * ( 1 + ...( 1 + pk ) ) ) ) = sum ,所以 a 一定是题目给出的 s 的一个因子,确定好第一层的因子后,直接dfs搜索就好了,记得一些特定细节的判断就好了,本来以为直接爆搜时间复杂度会高达8^20,肯定会TLE,结果连剪枝都没有,交上去20ms就跑完了,加了个最优性剪枝10ms就跑完了

代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
using namespace std;typedef long long LL;typedef unsigned long long ull;const int inf=0x3f3f3f3f;const int N=1e5+100;vector<int>fac;int ans=20;//答案肯定不超过20,因为3^20>8e8void init(int n)
{for(int i=1;i*i<=n;i++){if(n%i)continue;fac.push_back(i);if(i!=n/i)fac.push_back(n/i);}sort(fac.begin(),fac.end(),greater<int>());//排序是为了忽略因子为自身的这个元素
}void dfs(int n,int step)
{if(!n){ans=step;return;}if(step>=ans)//最优性剪枝return;for(int i=2;i<=9;i++){if(i>n)break;if(n%i)continue;dfs(n/i-1,step+1);}
}int main()
{
#ifndef ONLINE_JUDGE
//  freopen("input.txt","r",stdin);
//  freopen("output.txt","w",stdout);
#endif
//  ios::sync_with_stdio(false);int n;scanf("%d",&n);init(n);for(int i=1;i<fac.size();i++)//从1开始,忽略自身为因子的元素dfs(n/fac[i]-1,1);if(ans==20)ans=-1;printf("%d\n",ans);return 0;
}

中石油训练赛 - 关于我转生变成史莱姆这档事(dfs)相关推荐

  1. 日本热门TV动画《关于我转生变成史莱姆这档事》第三季将在2024年春放送

    日本热门TV动画<关于我转生变成史莱姆这档事第三季>将于2024年春季播出. BD短篇小说「彩叶草之梦」宣布动画化,全3话,2023年秋播出 <关于我转生变成史莱姆这档事>是经 ...

  2. 【牛客 - 318F】关于我转生变成史莱姆这档事(二分,搜索)

    题干: 有一天,利姆鲁在这个世界最重要的人静被魔王带走,并将其困在一个n*n的迷宫内的某一处,迷宫的每个格子都可能有一只魔物,魔物的攻击力为a[i][j],因而利姆鲁只有当攻击力大于等于a[i][j] ...

  3. 关于我转生变成史莱姆这档事

    https://ac.nowcoder.com/acm/contest/318/F C++版本一 题解:思路:二分+搜索,每次二分利姆鲁的初始攻击值,如果这个攻击值能够拯救到静就将mid赋值给ub,同 ...

  4. 期末前端web大作业:用DIV+CSS技术设计的动漫网站——关于我转生成史莱姆这件事 6页

    ⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材,DIV+CSS 布局制作,HTML+CSS网页设计期末课程大作业 | 网页设计作业 | 动漫网页设计 | 动漫网页设计成品 | 动漫 ...

  5. 关于我转生成史莱姆这件事

    链接:https://ac.nowcoder.com/acm/contest/318/F 来源:牛客网 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 262144K,其他语言5242 ...

  6. 中石油训练赛 - Trading Cards(最大权闭合子图)

    题目大意:给出 n 个卡片,可以自由买卖,且价格都是相同的,再给出 m 个集合,如果已经得到了其中一个集合中的卡片,那么可以获得该集合的收益,问如何操作可以使得收益最大化 题目分析:最大权闭合子图的模 ...

  7. 中石油训练赛 - Watch Later(状压dp)

    题目链接:点击查看 题目大意: 给出一个长度为 n 的字符串,字符串中共有 k 种不同的字符,现在问删除掉所有字符的最小操作数,对于每种字符需要确定一个先后顺序,每次需要删除掉当前所有的这种字符才能去 ...

  8. 中石油训练赛 - Swapping Places(字典序最小的拓扑排序)

    题目链接:点击查看 题目大意:给出 s 个字符串表示种类,再给出 m 个朋友关系,表示两个种类的动物是朋友,现在给出一个长度为 n 的种类排列,规定相邻两个是朋友的种类的动物可以交换位置,问如何操作, ...

  9. 中石油训练赛 - Gone Fishing(固定大小的圆可以覆盖最多的点)

    题目大意:在二维平面中给出 n 个点,再给出一个固定大小的圆,问如何放置这个圆可以使其覆盖最多的点 题目分析:首先不难想到一种 n^3 的做法,就是两层循环去枚举两个点,因为两个不同的点就可以确定下来 ...

最新文章

  1. 剑指offer:面试题41. 数据流中的中位数
  2. Alamofire源码解读系列(五)之结果封装(Result)
  3. 已知两个时间戳判断这两个时间是否在同一天
  4. 【oracle】补充 cursor 基本例子
  5. java collections 用法_Java Collections unmodifiableCollection()用法及代码示例
  6. html设置页面编码gbk,GBK及UTF-8网页编码定义与应用
  7. DIY—USB学习板设计以及驱动开发
  8. python中什么是链表_python中的数据结构-链表
  9. 苹果支付35亿元和解iPhone“降速门”:国内用户又被忽略了
  10. 2012-13学年上半学期路由与交换课程设计-作业-2
  11. MySQL 这三道必问面试题,你都会吗?
  12. ad域 禁用账号_大量AD域帐号自动被锁定
  13. 如何在Linux上下载MongoDB
  14. C# WPF仿360安全卫士11
  15. SpringBoot三种实现邮箱发送功能
  16. 将网页中的文字和图片转换成WORD文档
  17. Windows中快速获取文件目录的方法
  18. Comet OJ CCPC-Wannafly Comet OJ 夏季欢乐赛(2019)
  19. iClap的名字是怎么来的,clap是有什么特殊的意义么?
  20. react+echarts 实现中国地图

热门文章

  1. mysql数据库 quota_shell脚本抓取用户存储quota写道mysql并展现到grafana面板
  2. java 生成sql脚本_java导出insert语句并生成sql脚本
  3. MySQL【案例讲解】分组函数
  4. 对Spring创建对象的思考
  5. ConcurrentHashMap的源码分析-数据迁移阶段的实现分析
  6. MyBatis关键配置-接口的扫描注册
  7. MyBatis 源码解读-loadCustomLogImpl(settings)
  8. ES6新特性之修饰器
  9. Python简介-01-Python的起源
  10. java中的equals拿什么鞋的_Java中==和equals方法