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;
    }
    
  • 相关阅读:
    rails 相关文件
    linux学习---vi进行多行的copy,cut
    设计
    互联网---现在正在变成过去
    testing
    TTl
    如何成为优秀的性能测试工程师
    linuX学习
    Programiz 中文系列教程·翻译完成
    Programiz C 语言教程·翻译完成
  • 原文地址:https://www.cnblogs.com/tomori/p/13761212.html
Copyright © 2011-2022 走看看