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

    (f(i))表示对于i块糖的所有拿法,存储最大糖数目
    (f(i) = max{f(i - 2 * j) + j}), 其中(j)(i)的所有满足小于等于(sqrt{i})质因数

    #include<iostream>
    using namespace std;
    
    const int N = 100010;
    int n;
    int f[N];
    
    int main(){
        cin >> n;
        
        for(int i = 4; i <= n; i ++){
            int t = i;
            for(int j = 2; j <= t / j; j ++){
                if(t % j == 0){
                    while(t % j == 0) t /= j;
                    f[i] = max(f[i], f[i - 2 * j] + j);
                }
            }
        }
        
        
        cout << f[n] << endl;
        
        return 0;
    }
    
  • 相关阅读:
    203. Remove Linked List Elements
    python练习小程序
    五十音练习小软件
    CocosCreator生命游戏
    一个swift下载程序
    用excel做一幅像素画
    翻译一篇SpiderMonkey GC的文章
    unity-3d拼图游戏
    NDK编译Python2.7.5
    git命令简图
  • 原文地址:https://www.cnblogs.com/tomori/p/13761212.html
Copyright © 2011-2022 走看看