• 算法提高 拿糖果【埃氏筛 动态规划】


    问题描述
      妈妈给小B买了N块糖!但是她不允许小B直接吃掉。
      假设当前有M块糖,小B每次可以拿P块糖,其中P是M的一个不大于根号下M的质因数。这时,妈妈就会在小B拿了P块糖以后再从糖堆里拿走P块糖。然后小B就可以接着拿糖。
      现在小B希望知道最多可以拿多少糖。
    输入格式
      一个整数N
    输出格式
      最多可以拿多少糖
    样例输入
    15
    样例输出
    6
    数据规模和约定
      N <= 100000
    #include <cstdio>
    #include <iostream>
    #include <algorithm>
    #include <stdlib.h>
    #include <cstring>
    #include <vector>
    #include <cmath>
    #define inf 100005
    using namespace std;
    int n;
    int pri[400];
    int d[inf];
    void init() {
        pri[2] = 0;//0是素数
        pri[3] = 0;//0是素数
        pri[1] = 1;
        for (int i = 2; i < 400; i++) {
            if (pri[i]==1) continue;
            for (int j =  2 *i; j < 400; j += i)
                pri[j] = 1;
        }
    }
    int dp(int nn) {
        if (d[nn])    return d[nn];
        for (int i = sqrt(nn); i > 0; i--) {
            if (pri[i] == 0 && nn % i == 0) {
                d[nn] = max(d[nn], dp(nn - 2 * i)+i);
            }
        }
        return d[nn];
    }
    int main() {
        scanf("%d", &n);
        init();
        dp(n);
        cout << d[n];
        return 0;
    }
  • 相关阅读:
    demo
    Git
    rest-framework框架 -- 认证权限流程源码
    sublime
    restful 协议 +面试
    Django的CBV
    vue 之 vue-router
    vue 之node.js 02
    浏览器内核
    安装apache+php+mysql
  • 原文地址:https://www.cnblogs.com/woxiaosade/p/10455695.html
Copyright © 2020-2023  润新知