zoukankan      html  css  js  c++  java
  • 算法提高 拿糖果【埃氏筛 动态规划】

    问题描述
      妈妈给小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;
    }
  • 相关阅读:
    Python assert(断言)
    Python importlib(动态导入模块)
    Python 异常处理
    Qt Clipboard剪贴板简单使用
    Qt5 QTableWidget设置列表自动适应列宽
    Fix VNC Desktop Sharing on Ubuntu Desktop 14.04
    Golang 交叉编译
    stdobj to array php
    Elasticsearch-集群原理
    Elasticsearch-基本操作2
  • 原文地址:https://www.cnblogs.com/woxiaosade/p/10455695.html
Copyright © 2011-2022 走看看