题目大意:ACM实验室开启了一个数字工程项目,希望把正整数n通过一些特殊方法变成1。可采用的方法有:(1)减去1;(2)除以它的任意一个素因子。 每操作一次消耗一个单位的能量。问,把n变成1最少需要消耗多少能量?

定义\(f(i)\)为将i变为1所需要的能量,则有递归式:

\[\min({f(i-1)+1,\min_{质数p|i}({f(i/p)+1})})
\]

用刷表法解决即可。

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; const int MAX_N = 1000010, MAX_PRIME = 1000000, INF = 0x3f3f3f3f;
int F[MAX_N], Primes[MAX_PRIME];
int N; void GetPrime(int *prime, int n)
{
static bool NotPrime[MAX_PRIME];
memset(NotPrime, false, sizeof(NotPrime));
int primeCnt = 0;
for (int i = 2; i <= n; i++)
{
if (!NotPrime[i])
prime[primeCnt++] = i;
for (int j = 0; j < primeCnt; j++)
{
if (i*prime[j] > n)
break;
NotPrime[i*prime[j]] = true;
if (i%prime[j] == 0)
break;
}
}
} int DP(int n)
{
if (n <= N)
return F[n];
for (int i = 1; i <= n; i++)
{
F[i + 1] = min(F[i + 1], F[i] + 1);
for (int j = 1; Primes[j] <= n / i; j++)
F[i * Primes[j]] = min(F[i * Primes[j]], F[i] + 1);
}
N = n;
return F[n];
} int DP_Dfs(int n)
{
if (F[n] < INF)
return F[n];
F[n] = DP_Dfs(n - 1) + 1;
for (int i = 1; Primes[i] <= n; i++)
if (n%Primes[i] == 0)
F[n] = min(F[n], DP_Dfs(n / Primes[i]) + 1);
return F[n];
} int main()
{
GetPrime(Primes + 1, MAX_N);//易忘点:MAX_N,而不是MAX_PRIME
memset(F, INF, sizeof(F));
N = 1;
F[N] = 0;
int n;
while (~scanf("%d", &n))
printf("%d\n", DP(n));
return 0;
}

最新文章

  1. Visual Studio中创建混合移动应用程序解决方案Xamarin Portable Razor
  2. 设计模式之美:Behavioral Patterns(行为型模式)
  3. Script to set the Purchase Order Status to ‘OPEN’(将采购订单重新打开)
  4. SPOJ375 Query on a tree(LCT边权)
  5. c# is和as的区别
  6. Android 判断当前联网的类型 wifi、移动数据流量
  7. java 复习003 之排序篇
  8. day5_python学习笔记_chapter6_字符串列表元组
  9. 02将代码开源到github(不会使用github的来看看吧)
  10. ios开发之滑动长图截全屏应用
  11. 重装系统之后Hexo快速配置
  12. sphinx的安装
  13. 手把手教你全家桶之React(一)
  14. 杨校老师课堂之JavaScript右下角广告弹框教程
  15. 我为什么推荐你使用kindle
  16. [微信小程序]在应用地图时,如何设置满屏(高度)
  17. CCF计算机网络会议日期
  18. Python环境下如何安装爬虫需求的一些库
  19. SpringBoot入门之分散配置
  20. Unity在OpenGL模式下Shader编译报错

热门文章

  1. indeed 5.13 第二次网测
  2. C#之单列双列集合绑定数据
  3. 171129-workaround on ubuntu-seting up piston for steem
  4. WIN10 64位下VS2015 C#直接添加 halcon 12导出的CS文件实现视觉检测
  5. 黑客常用dos命令
  6. OAuth密码模式说明(resource owner password credentials)
  7. crypto-js RC4和hash_hmac运用
  8. python从TXT创建PDF文件——reportlab
  9. 洛谷P1616 疯狂的采药【完全背包】
  10. [luogu1129 ZJOI2007] 矩阵游戏 (二分图最大匹配)