蓝桥杯 算法提高 拿糖果(dfs+记忆化搜索)
来源:互联网 发布:数据转换器 编辑:程序博客网 时间:2024/05/29 11:42
算法提高 拿糖果
时间限制:1.0s 内存限制:256.0MB
问题描述
妈妈给小B买了N块糖!但是她不允许小B直接吃掉。
假设当前有M块糖,小B每次可以拿P块糖,其中P是M的一个不大于根号下M的质因数。这时,妈妈就会在小B拿了P块糖以后再从糖堆里拿走P块糖。然后小B就可以接着拿糖。
现在小B希望知道最多可以拿多少糖。
假设当前有M块糖,小B每次可以拿P块糖,其中P是M的一个不大于根号下M的质因数。这时,妈妈就会在小B拿了P块糖以后再从糖堆里拿走P块糖。然后小B就可以接着拿糖。
现在小B希望知道最多可以拿多少糖。
输入格式
一个整数N
输出格式
最多可以拿多少糖
样例输入
15
样例输出
6
数据规模和约定
N <= 100000
思路:dfs+记忆化搜索
p既要满足质数(1不是质数)又要满足因数
AC代码:
#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>using namespace std;const int maxn=1e5+10;int d[maxn];bool check(int v){for(int i=2;i<=sqrt(v);i++){if(v%i==0)return false ;}return true ;}int dfs(int i){int& ans=d[i];if(ans>0)return ans;for(int j=2;j<=sqrt(i);j++){if(check(j) && i%j==0) if(i>=2*j) ans=max(ans,dfs(i-2*j)+j); else if(i>=j) ans=max(ans,dfs(i-j)+j);}return ans;}int main(){int n;while(scanf("%d",&n)==1){memset(d,0,sizeof(d));printf("%d\n",dfs(n));}return 0;}
1 0
- 蓝桥杯 算法提高 拿糖果(dfs+记忆化搜索)
- 算法提高 拿糖果 记忆化深搜
- 蓝桥杯 算法提高 拿糖果
- 蓝桥杯算法提高 拿糖果
- 蓝桥杯 算法提高 拿糖果
- 蓝桥杯 算法提高 拿糖果
- 算法提高 拿糖果
- 算法提高 拿糖果
- 算法提高 拿糖果
- 算法提高 拿糖果
- 蓝桥杯 ADV-205算法提高 拿糖果(动态规划)
- 蓝桥杯算法提高——拿糖果(数学+dp)
- 蓝桥杯练习:算法提高 拿糖果
- 蓝桥杯--算法提高:拿糖果(动态规划)
- 算法提高 拿糖果 (贪心啊~)
- 算法提高 拿糖果 DP
- 蓝桥杯 算法提高 拿糖果(筛法+动态规划)
- 蓝桥杯 ADV-205 算法提高 拿糖果 java版
- Java中的装箱拆箱
- CS231n-2-Intro to Image Classifier
- JQ-reveiw
- 当一个好领导必须要具备的三大能力
- floyd最短路径算法2,求出经过哪些路径
- 蓝桥杯 算法提高 拿糖果(dfs+记忆化搜索)
- python3 assert
- Java垃圾收集
- 【转载】WebDriver如何切换到新打开的窗口中
- SCU-3088 windy's cake VIII
- redis 队列的简单实现
- 使用OpenCV检测和追踪车辆
- 2017Google Study Jams之L2篮球计分APP实践
- 用Redis Desktop Manager连接Redis